我有一个有序数组,以确保每个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 ()
)
)
)
)
)
)
我错过了什么?