PHP Alt Kategori Algoritması
Merhabalar,
PHP ile sınırsız alt kategori mantığı uygulaması yeni başlayanlar için biraz karmaşık bir yapıdır. Özyinelemeli fonksiyonlar kullanılarak sınırsız alt üyeye sahip elementlerimizi array list olarak sunan bir fonksiyonu sizlerle paylaşmak istiyorum.
Veritabanından kategorilerinizi çektiğinizi ve aşağıda ki şekilde bir diziye sahip olduğunuzu varsayalım.
$categories = array(
array('id' => 1, 'parent' => 0, 'name' => 'Category A'),
array('id' => 2, 'parent' => 0, 'name' => 'Category B'),
array('id' => 3, 'parent' => 0, 'name' => 'Category C'),
array('id' => 4, 'parent' => 0, 'name' => 'Category D'),
array('id' => 5, 'parent' => 0, 'name' => 'Category E'),
array('id' => 6, 'parent' => 2, 'name' => 'Subcategory F'),
array('id' => 7, 'parent' => 2, 'name' => 'Subcategory G'),
array('id' => 8, 'parent' => 3, 'name' => 'Subcategory H'),
array('id' => 9, 'parent' => 4, 'name' => 'Subcategory I'),
array('id' => 10, 'parent' => 9, 'name' => 'Subcategory J'),
);
Bu diziyi aşağıda hazırladığımız fonksiyona girdi olarak vererek ister en üst kategori düzeyinden istersek alt kategori düzeyinden çıktı alabiliriz.
function findChild(array &$elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = findChild($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[$element['id']] = $element;
}
}
return $branch;
}
Bu fonksiyonu tüm kategorileri listelemekte kullanmak için
$cikti = findChild($categories , 0);
Yada alt kategoriden başlayarak listelemek için
$cikti = array();
$cikti[1] = $categories[0];
$cikti[1][‘children’] = findChild($categories, 1);
Şeklinde kodumuzu çalıştırabiliriz.
Takıldığınız yerde yorum yaparak sorunuzu iletebilirsiniz.
Teşekkürler.
(Not: Fonksiyonu internetten hazır şekilde buldum. Kendi kodum değildir.)