Столкновение с некоторыми проблемами в многоуровневой иерархии категорий

Я хочу просто создать многоуровневую (трехуровневую) иерархию категорий, используя модель списка смежности.

Таблица категорий:

________________________________________________________________________
| id              |  parent_id     | name            | page_order
————————————————————————————————————————————————————————————————————————
| 1               |  0             | Home            |     0
| 2               |  0             | sweets          |     0
| 3               |  2             | tin sweet       |     0
| 4               |  3             | tin rasugulla   |     0
| 5               |  2             | kaju katri      |     0
| 6               |  2             | ras malai       |     0
————————————————————————————————————————————————————————————————————————

Мой результат должен быть таким (согласно приведенной выше таблице):

  • Главная
  • сладости
    • сладкая жесть
      • оловянная расугулла
    • Каджу Катри
    • Рас Малай

Но я получаю немного другой вывод:

  • Главная
  • сладости
    • сладкая жесть
    • Каджу Катри
    • Рас Малай
    • оловянная расугулла

вот мой код codeigniter:

    public function get_nested(){
// fetching categories from table
$this->db->order_by($this->_order_by);
$pages = $this->db->get($this->_table_name)->result_array();

// now creating category tree
foreach ($pages as $page){
if ($page['parent_id'] == 0){
$array[$page['id']] = $page;
}else {
$array[$page['parent_id']]['children'][$page['id']] = $page;
}
}
return $array;
}

снимок результата запроса: var_dump($pages);

введите описание изображения здесь

снимок var_dump($array):

введите описание изображения здесь

Вот код для создания списка для вывода:

function toUL($array)
{
$html = '<ul>' . PHP_EOL;

foreach ($array as $value)
{
$html .= '<li>' . $value['title'];

// do we have any children?
if (isset($value['children']) && count($value['children'])){
$html .= toUL($value['children']);
}
$html .= '</li>' . PHP_EOL;
}

$html .= '</ul>' . PHP_EOL;

return $html;
}

мой приведенный выше код дает мне сообщение об ошибке: неопределенный индекс: название

2

Решение

Проблема в том, что ваш код вложения ссылается на несуществующие идентификаторы в массиве $.

Для «tin rasugulla» parent_id = 3, который не существует на корневом уровне $ array, поэтому он создается, когда он фактически должен попытаться найти родителя с идентификатором 3, который находится ниже «sweets».

Это должно работать:

public function get_nested(){
// fetching categories from table
$this->db->order_by($this->_order_by);
$pages = $this->db->get($this->_table_name)->result_array();

// now creating category tree
foreach ($pages as $page){
if ($page['parent_id'] == 0){
$array[$page['id']] = $page;
} elseif (isset($array[$page['parent_id']])) {
$array[$page['parent_id']]['children'][$page['id']] = $page;
} else {
foreach ($array as $root_id => $parent) {
if (isset($parent['children'][$page['parent_id']])) {
$array[$root_id]['children'][$page['parent_id']]['children'][$page['id']] = $page;
}
}
}
}
return $array;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]