Перенести элемент массива в другой элемент массива php
Необходимо в родительских элементах массива создать новый индекс и перенести все дочерние в него, id у каждого элемента есть, id родительского элемента также есть. Облазил уже наверно все функции php с работой с массивами, ничего не могу найти. Такое вообще возможно? Есть массив вида:
Array(
[0] => Array(
[id] => 100
[lvl] => 1
)
[1] => Array(
[id] => 101
[parent] => 100
[lvl] => 2
)
[2] => Array(
[id] => 102
[parent] => 101
[lvl] => 3
)
[3] => Array(
[id] => 103
[parent] => 101
[lvl] => 3
)
)
Хочу сделать такого вида:
Array(
[0] => Array(
[id] => 100
[lvl] => 1
[child] => Array(
[0] => Array(
[id] => 101
[parent] => 100
[lvl] => 2
[child] => Array(
[0] => Array(
[id] => 102
[parent] => 101
[lvl] => 3
)
[1] => Array(
[id] => 103
[parent] => 101
[lvl] => 3
)
)
)
)
)
)
Ответы (1 шт):
Нашёл таки решение, не знаю на сколько правильное, но вроде рабочее. Сначала надо перегнать в новый массив весь первый уровень:
foreach($Array as $old_Arr){
if($old_Arr["lvl"] == 1){
$old_Arr["child"] = array();
$new_Arr[] = $old_Arr;
}
}
Затем прогоняем полученный массив по индексам, попутно снова прогоняя исходный массив, и сравневаем id
for($i = 0; $i < count($new_Arr); $i++){
foreach($Array as $old_Arr){
if($new_Arr[$i]["id"] == $old_Arr["parent"]){
$old_Arr["child"] = array();
$new_Arr[$i]["child"][] = $old_Arr;
}
}
}
Затем снова прогоняем полученный массив по индексам и индексам внутри child, попутно снова прогоняя исходный массив, и сравневаем id
for($i = 0; $i < count($new_Arr); $i++){
for($j = 0; $j < count($new_Arr[$i]["child"]); $j++){
foreach($Array as $old_Arr){
if($new_Arr[$i]["child"][$j]["id"] == $old_Arr["parent"]){
$new_Arr[$i]["child"][$j]["child"][] = $old_Arr;
}
}
}
}
Данное решение думаю подойдёт, если в исходном массиве не очень много данных, поэтому не считаю его идеальным.