Проблема заключается в корректности составления массива категорий и под категорий. Собственно сам код:
Метод создания самого дерева из массива:
public static function getTree($dataset){
$tree = [];
foreach ($dataset as $id => &$node) {
if (!$node['parent_id'])
$tree[$id] = &$node;
else
$dataset[$node['parent_id']]['childs'][$node['id']] = &$node;
}
return $tree;
}
Метод, в котором используется созданное древо, и, соответственно, выводится результат:
public static function getCategoriesList()
{
$db = Db::getConnection();
$result = $db->query('SELECT id, name, parent_id FROM category WHERE status = "1" ORDER BY sort_order, name ASC');
$i = 0;
$categoryList = [];
while ($row = $result->fetch()) {
$categoryList[$i]['id'] = $row['id'];
$categoryList[$i]['name'] = $row['name'];
$categoryList[$i]['parent_id'] = $row['parent_id'];
$i++;
}
$tree = Category::getTree($categoryList);
echo '<pre>'.print_r($tree, true).'</pre>';
return true;
}
Таблица категорий
И дерево, которое получается:
В методе getCategoriesList
массив категории заполняется с последовательными номерами ключей ($i
), а в методе getTree
идет обращение к категориям из этого массива по идентификатору родительской категории ($dataset[$node['parent_id']]
).
При заполнении массива следует указывать ключ категории $row['id']
.
while ($row = $result->fetch()) {
$categoryList[$row['id']]['id'] = $row['id'];
$categoryList[$row['id']]['name'] = $row['name'];
$categoryList[$row['id']]['parent_id'] = $row['parent_id'];
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Пытаюсь реализовать отправку уведомления о прочтении писем получателемВ интернете насерфил такие хейдеры:
В чем может быть причина этой ошибкипри входе на сайт от другого пользователя в блоге рядом с комментариями все аватары изменяются идентично...