Я получаю строки из базы данных, и я пытаюсь сгенерировать массив родительских категорий и его дочерних категорий (у детей также могут быть дети), чтобы я мог передать эти данные массива в мое представление шаблона smarty и отобразитьфлажки с каждой категорией и подкатегорией.
Table Categories:
id | name | parent_id
1 | Electronics | 0
2 | Mobile | 1
3 | iPhone | 2
4 | Men | 0
5 | Shirt | 4
Я хочу, чтобы результат был таким, чтобы эти категории с parent_id = 0
становились родительскими и показывали вложенных дочерних элементов под ним: как показано ниже
Array (
[0] => Array (
[id] => 1
[name] => Electronics
[children] => Array (
[0] => Array (
[id] => 2
[name] => Mobile
[children] => Array (
[0] => Array (
[id] => 3
[name] => iPhone
)
)
)
)
[1] => Array (
[id] => 4
[name] => Men
[children] => Array (
[0] => Array (
[id] => 5
[name] => Shirt
)
)
)
И вот код, который я написал до сих пор:
$parentCat = Shopware()->Db()->query("SELECT * FROM `categories`");
$cats = [];
foreach ($parentCat->fetchAll() as $key => $value) {
$prevId = $value['parent_id'];
if ($prevId == 0) {
$data = [
'id' => $value['id'],
'name' => $value['name']
];
array_push($cats, $data);
} else {
foreach ($cats as $cat) {
if($value['parent_id'] == $cat['id']) {
$childData = [
'id' => $value['id'],
'name' => $value['name'],
];
array_push($cats,$childData);
}
}
}
}
print_r($cats);
die();
Результат, который я получаю, выглядит так:
Array
(
[0] => Array
(
[id] => 1
[name] => Electronics
)
[1] => Array
(
[id] => 2
[name] => Mobile
)
[2] => Array
(
[id] => 3
[name] => iPhone
)
[3] => Array
(
[id] => 4
[name] => Cars
)
[4] => Array
(
[id] => 5
[name] => Toyota
)
)
Пожалуйста, помогите.