@Shtaket87
Начинающий веб разработчик

Как понять фрагмент кода?

Помогите понять, как работает код пошагово? Понятно, что этот код сортирует исходный массив с учетом иерархии. Но я не могу понять, как именно.

$array = array ( 
  array('id' => 1,'parent' => 0,'title' => 'Ветка 1'), 
  array('id' => 2,'parent' => 1,'title' => 'Ветка 1.1'), 
  array('id' => 3,'parent' => 2,'title' => 'Ветка 1.1.1'), 
  array('id' => 4,'parent' => 1,'title' => 'Ветка 1.2'), 
  array('id' => 5,'parent' => 3,'title' => 'Ветка 1.2.1'), 
  array('id' => 6,'parent' => 4,'title' => 'Ветка 1.2.1.1'), 
); 

$tree = array(); 
$sub = array( 0 => &$tree ); 

foreach ($array as $item) 
{ 
    $id = $item['id']; 
    $parent = $item['parent']; 

    $child = &$sub[$parent];
    $child[$id] = array(); 
    $sub[$id] = &$child[$id]; 
}
  • Вопрос задан
  • 214 просмотров
Пригласить эксперта
Ответы на вопрос 3
mahoho
@mahoho
Full stack certified PHP developer.
Про ссылки внутри массивов написано в документации:
php.net/manual/ru/language.references.whatdo.php.
А этот код ничего не сортирует, а создает в $tree дерево пустых массивов на основе значений id и parent_id в исходных массивах. Если поменять порядок элементов местами в исходном массиве, все поломается.
Ответ написан
Комментировать
sabramovskikh
@sabramovskikh
в цикле поставить print_r($var); и выводить что хотите посмотреть
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
следите за значением переменной $sub. Спойлер - это ссылка, которую мы в цикле постоянно меняем, указатель на текущий элемент дерева.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы