0
我有一個有序數組,因此每個ref
鍵都保證存在於同一個數組中的前幾個元素中。但是,引用可能位於前一個元素的另一個數組內。所以我使用遞歸函數來找到合適的位置,但由於某種原因,我無法刪除前一個元素。PHP:通過循環和函數移動(不復制)數組元素之間的引用數組
我能做些什麼:到屬於他們的地方
複製必需的元素我可以不信息:移動跨陣列
這些元素這裏有原始數組的僞輸出。
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()
)
)
)
)
)
)
我缺少什麼?