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 ()
)
)
)
)
)
)
私は何が欠けていますか?