我正在使用遞歸函數構建關聯數組,該函數涉及攜帶通過每個實例的路徑以將值推送到嵌套的鍵數組因此,我們為函數提供一個包含 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;在我們的遞歸函數的第二次運行中,我們循環遍歷新添加的鍵子集并重新運行該過程。問題是我正在失去我的父路徑?,F在我可以通過函數發送我們的第一個 $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() ))又怎樣?
1 回答

撒科打諢
TA貢獻1934條經驗 獲得超2個贊
我不完全確定我完全理解了這個問題,但是這里有。
您可以使用更簡單的方法,只需將 ID 數組作為參數并填充數組,其中:
每個鍵都是ID,
每個值都是基于該 ID 的子 ID 的后續迭代的結果。
功能:
function rcr(array $ids): array
{
$array = [];
foreach ($ids as $id) {
$array[$id] = rcr(getSubIds($id));
}
return $array;
}
getSubIds獲取 ID 的子 ID 的其他函數在哪里。這是您的示例之后的虛擬實現:
function getSubIds(int $id): array
{
switch ($id) {
case 2: return [5, 108];
case 5: return [7];
case 7: return [46];
case 8: return [72];
default: return [];
}
}
用法:
$result = rcr([2, 14, 8]);
演示:https ://3v4l.org/tjMRa
- 1 回答
- 0 關注
- 146 瀏覽
添加回答
舉報
0/150
提交
取消