У меня есть упорядоченный массив, поэтому каждый ключ ref
гарантированно существует среди первых элементов в том же массиве. Однако ссылка может находиться внутри другого массива в предыдущем элементе. Поэтому я использую рекурсивную функцию, чтобы найти подходящее место, но по какой-то причине я не могу удалить первый элемент.
Что я могу сделать: скопировать необходимые элементы туда, где они должны быть
Чего я не могу делать: перемещать эти элементы по массивам.
Вот псевдо-вывод исходного массива.
Array
(
[0] => Array
(
[id] => 1
[ref] =>
[arr] => Array ()
)
[1] => Array
(
[id] => 2
[ref] => 1
[arr] => Array ()
)
[2] => Array
(
[id] => 3
[ref] => 1
[arr] => Array ()
)
[3] => Array
(
[id] => 4
[ref] => 3
[arr] => Array ()
)
)
Вот мой код.
$myArr = array(/* above elements gathered from the DB */);
foreach ($myArr as &$arr) {
if (!is_null($arr['ref'])) relocate($arr, $arr['ref']);
}
unset($arr);
function relocate(&$node, $id, &$arr=NULL) {
global $myArr;
if (is_null($arr)) $arr = &$myArr;
foreach ($arr as &$arr1) {
if ($arr1['id'] == $id) {
array_push($arr1['arr'], &$node);
return;
}
}
unset($arr1); // not sure if this is necessary
if (!empty($arr['arr'])) relocate(&$node, $id, &$arr['arr']);
}
И желаемый вывод:
Array
(
[0] => Array
(
[id] => 1
[ref] =>
[arr] => Array
(
[0] => Array
(
[id] => 2
[ref] => 1
[arr] => Array ()
)
[1] => Array
(
[id] => 3
[ref] => 1
[arr] => Array
(
[0] => Array
(
[id] => 4
[ref] => 3
[arr] => Array ()
)
)
)
)
)
)
Что мне не хватает?
1 ответ
Я думаю, что перемещение по ссылке - это воображаемый подход. В итоге я использовал следующий код.
$myArr = array(/* elements gathered from the DB */);
foreach ($myArr as $arr) {
if (!is_null($arr['ref'])) {
relocate($arr, $arr['ref']);
unset($myArr[array_search($arr,$myArr)]);
}
}
function relocate($node, $id, &$arr=NULL) {
global $myArr;
if (is_null($arr)) $arr = &$myArr;
foreach ($arr as &$arr1) {
if ($arr1['id'] == $id) {
return array_push($arr1['arr'], $node);
}
if (!empty($arr1['arr'])) relocate($node, $id, &$arr1['arr']);
}
}
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.