@Isherath

Как превратить массив в дерево?

Как обойти этот массив так, чтобы получилось дерево, где parent_id == category_id?

Array
(
    [0] => Array
        (
            [category_id] => 1
            [parent_id] => 
            [alias] => /platya
            [name] => Платья
            [translit] => 
        )

    [1] => Array
        (
            [category_id] => 2
            [parent_id] => 1
            [alias] => /platya/tuniki
            [name] => Туники
            [translit] => 
        )

    [2] => Array
        (
            [category_id] => 3
            [parent_id] => 1
            [alias] => /platya/sarafany
            [name] => Сарафаны
            [translit] => 
        )

    [3] => Array
        (
            [category_id] => 4
            [parent_id] => 1
            [alias] => /platya/mini
            [name] => Мини
            [translit] => 
        )

    [4] => Array
        (
            [category_id] => 5
            [parent_id] => 1
            [alias] => /platya/midi
            [name] => Миди
            [translit] => 
        )

    [5] => Array
        (
            [category_id] => 6
            [parent_id] => 1
            [alias] => /platya/maksi
            [name] => Макси
            [translit] => 
        )

    [6] => Array
        (
            [category_id] => 7
            [parent_id] => 2
            [alias] => /platya/maksi/super
            [name] => Супер
            [translit] => 
        )

)
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Barmunk
$data = [];
foreach($array as $item) {
if ($item['category_id'] == $item['parent_id']) $data[] = $item;
}

но в примере условие не выполнится же
Ответ написан
0xD34F
@0xD34F
function createTree($data, $idField, $parentField, $rootParent) {
  foreach ($data as $n) {
    $tree[$n[$idField]] = $n;
  }
  foreach ($data as $n) {
    $tree[$n[$parentField]]['children'][] = &$tree[$n[$idField]];
  }

  return $tree[$rootParent]['children'];
}


$tree = createTree($arr, 'category_id', 'parent_id', '');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 55 000 до 80 000 руб.
WACDAQ Москва
от 120 000 руб.
HTML Academy Санкт-Петербург
от 110 000 до 130 000 руб.
22 авг. 2019, в 09:33
400 руб./в час
22 авг. 2019, в 09:06
20000 руб./за проект
22 авг. 2019, в 07:30
10000 руб./за проект