亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嵌套數組路徑作為變量

嵌套數組路徑作為變量

PHP
侃侃無極 2022-07-16 10:26:21
我正在使用遞歸函數構建關聯數組,該函數涉及攜帶通過每個實例的路徑以將值推送到嵌套的鍵數組因此,我們為函數提供一個包含 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


查看完整回答
反對 回復 2022-07-16
  • 1 回答
  • 0 關注
  • 146 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號