为了账号安全,请及时绑定邮箱和手机立即绑定

嵌套数组路径作为变量

嵌套数组路径作为变量

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;在我们的递归函数的第二次运行中,我们循环遍历新添加的键子集并重新运行该过程。问题是我正在失去我的父路径。现在我可以通过函数发送我们的第一个 $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 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号