Я попытался сделать функцию, которая выполняет итерацию через следующий массив, чтобы сгладить его и добавить родительский идентификатор к детям, где это применимо. Я просто не могу заставить его работать, так что я надеюсь, что кто-то здесь имеет представление о том, что делать:PHP: Модифицирование массива рекурсивно?
Вот отправную точку:
Array
(
[0] => Array (
[id] => 1
[children] => array (
[id] => 2
[children] => Array (
[0] => Array (
[id] => 3
)
)
)
)
Ожидаемый результат:
Array (
[0] => array (
[id] => 1
)
[1] => array (
[id] => 2
)
[2] => array (
[id] => 3,
[parent] => 2
)
)
Надеюсь, что каждый может указать мне в правильном направлении. Большое спасибо!
Решение (Спасибо Оли!):
$output = array();
function dejigg($in) {
global $output;
if (!isset($in['children'])) {
$in['children'] = array();
}
$kids = $in['children'] or array();
unset($in['children']);
if (!isset($in['parent'])) {
$in['parent'] = 0; // Not neccessary but makes the top node's parent 0.
}
$output[] = $in;
foreach ($kids as $child) {
$child['parent'] = $in['id'];
dejigg($child); // recurse
}
return $output;
}
foreach ($array as $parent) {
$output[] = dejigg($parent);
}
$array = $output;
print("<pre>".print_r($array,true)."</pre>");
Вы хотите третий элемент ожидаемого результата быть 2, а не 3, правильно? Просто опечатка? – animuson
Привет! Correctomundo. Благодаря! – Industrial