【问题标题】:PHP One level deeper in array each loop madePHP 每个循环在数组中更深一层
【发布时间】:2011-12-12 20:08:06
【问题描述】:

我正在尝试遍历一个数组,每次都向另一个数组添加一个新级别。让我来说明一下 - 变量 $arr 的值每次都不同

$arr = array("1","5","6");

循环

$index[$arr[0]];

循环

$index["1"][$arr[1]]  // "1" since this key was filled in by the previous loop, continuing with a new key

循环

$index["1"]["5"][$arr[2]] // same as previous loop

--遍历所有$arr的项目,完成,结果是$index["1"]["5"]["6"]--

问题是我不知道$arr 数组包含多少值。然后,当$arr 的第一个值循环到下一个数组级别时,我不知道如何从$index["1"] 继续(换句话说:添加另一个键)..

有人吗?

【问题讨论】:

  • 用户询问如何根据现有数组的值构建多维数组。使用给定的数组 [1, 5, 6],他想构建一个如下所示的数组:$array[1][5][6]
  • 好吧,我不确定最终的函数会是什么样子,但如果有一个递归函数会很容易。
  • 没错,谢谢@ChrisSobolewski

标签: php arrays loops nested


【解决方案1】:

你基本上是想看看多维数组有多深,对吧?如果是这样,这应该会有所帮助:Is there a way to find out how "deep" a PHP array is?

【讨论】:

    【解决方案2】:
    function add_inner_array(&$array, $index) {
        if(isset($array[$index])) return true;
        else {
            $array[$index] = array();
            return true;
        }
    }
    
    $a = array(1,5,6);
    $index = array();
    $pass =& $index;
    foreach($a as $k) {
        add_inner_array($pass, $k);
        $pass =& $pass[$k];
    }
    

    【讨论】:

    • 谢谢本,这可以解决问题。现在,最后,我怎样才能为最后一个键(而不是空数组)赋值?
    【解决方案3】:

    我可能错了,但我想你问的和这个问题一样:Multidimensional Arrays Nested to Unlimited Depth

    【讨论】:

      【解决方案4】:

      您可以在此处使用参考资料:

      $a = array("1","5","6");
      $b = array();
      $c =& $b;
      
      foreach ($a as $k) {
          $c[$k] = array();
          $c     =& $c[$k];
      }
      

      输出

      Array 
          (
          [1] => Array
              (
                  [5] => Array
                      (
                          [6] => Array
                              (
                              )
                      )
              )
      )
      

      要用其他值覆盖最后一个元素,只需添加以下行:

      $c = 'blubber';
      

      在循环之后,因为 $c 是对最深数组级别的引用,当循环结束时。

      【讨论】:

        猜你喜欢
        • 2018-03-13
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        相关资源
        最近更新 更多