Был на собесе дали задание сделать сортировку массива бесконечной вложенности Суть задачи в том что есть массив Код (Text): $array = [ ['id'=>1,'name'=>'director','parent_id'=>null], ['id'=>2,'name'=>'уборщца','parent_id'=>1], ['id'=>3,'name'=>'нач отдела','parent_id'=>1], ['id'=>4,'name'=>'сотрудник','parent_id'=>3], ]; привести его к виду Код (Text): $array = [ ['id'=>1,'name'=>'director','parent_id'=>null, 'children'=>[ ['id'=>2,'name'=>'уборщца','parent_id'=>1,'children'=>[]], ['id'=>3,'name'=>'нач отдела','parent_id'=>1,'children'=>[ ['id'=>4,'name'=>'сотрудник','parent_id'=>3, 'children'=>[]] ] ] ] ] ]; Причём детей может быть бесконечно много друг под другом как и директоров которые должны быть на одном уровне. В лучших традиция я сделал вложенным форичем что не позволило реализовать до конца задачу, он показал как надо но я мысль не уловил, там вообщем делается через карту массива и с помощью ссылок, кто может помочь реализовать это вот всё?
Ты называешь преобразование в другой вид "сортировкой"? Тут напрашивается рекурсивная функция, которая ищет всех детей для текущего узла и обращается сама к себе чтобы найти детей этих детей и т.д. Конечно, любую рекурсию можно развернуть в итерацию, но рекурсия красивей и наглядней. Удачи! --- Добавлено --- google recursive function to translate adjacency list to nested array
Без рекурсии. PHP: $array = [ ['id'=>1,'name'=>'director','parent_id'=>null], ['id'=>2,'name'=>'уборщца','parent_id'=>1], ['id'=>3,'name'=>'нач отдела','parent_id'=>1], ['id'=>4,'name'=>'сотрудник','parent_id'=>3], ]; $data = array_combine(array_column($array, 'id'), $array); $treeResult = buildTree($data, 'parent_id'); echo "<pre>"; var_export($treeResult); echo "</pre>"; function buildTree(array $data, string $field): array { $arr = []; foreach ($data as $key => &$node) { if (!array_key_exists($node[$field], $data)) { $arr[$key] = &$node; } else { $data[$node[$field]]['childs'][$key] = &$node; } } return $arr; }