我正在使用递归函数构建关联数组,该函数涉及携带通过每个实例的路径以将值推送到嵌套的键数组
因此,我们为函数提供一个包含 3 个键的基本数组,其中包含空数组作为值
$fooArray = array(2 => array(), 14 => array(), 8 => array());
$ids = array(2, 14, 8);
function test($fooArray, $ids) {
我们的递归函数从循环这些 id 开始,检查每个的子 ID,然后将填充了值的数组添加到键
$subids = array(5, 8, 9);
$subkeys = array_fill_keys($subids, array());
$fooArray[$id] = $subkeys;
在我们的递归函数的第二次运行中,我们循环遍历新添加的键子集并重新运行该过程。问题是我正在失去我的父路径。
现在我可以通过函数发送我们的第一个 $id 作为父 ID,然后推送
$fooArray[$pid][$id] = $subkeys
但是现在我该怎么做第三次和第四次跑步呢?我需要的是一种方法来构建该路径并通过每个功能执行它
$path = $fooArray[$pid][$id];
$path = $fooArray[$pid][$pid][$id];
这是我最好的尝试
function rcr(&$fooArray, $ids, $path, $i = 0) {
if ($ids and count($ids) > 0) {
foreach( $ids as $id ) {
$subids = // function that gets our array of subids
$subkeys = array_fill_keys($subids);
if ($i == 0) {
$fooArray[$id] = $subkeys;
$path = &$fooArray[$id];
} else {
$path[$id] = $subkeys;
$path = &$path[$id];
}
$s = $i + 1;
function rcr($fooArray, $subids, $path, $s);
}
}
}
function get_rcr() {
$fooArray = array(2 => array(), 14 => array(), 8 => array());
$ids = array(2, 14, 8);
$path = "";
rcr($fooArray, $ids, $path, $i = 0);
return $fooArray;
}
但是在函数的第二次运行时,$path[$id] 无法添加到主 $fooArray
期望的结果是
array(
[2] => array(
[5] => array(
[7] => array(
[46] => array()
)
),
[108] => array()
),
[14] => array(),
[8] => array(
[72] => array()
)
)
又怎样?
侃侃无极
撒科打诨
随时随地看视频慕课网APP