【问题标题】:PHP: how to turn multidimensional array to single dimension dynamicallyPHP:如何将多维数组动态转换为单维
【发布时间】:2012-06-05 15:52:05
【问题描述】:

我有一个这样的数组

array(4) {
  [0]=>
  array(2) {
    [0]=>
    string(10) "2012-05-23"
    [1]=>
    string(10) "2012-05-31"
  }
  [1]=>
  array(2) {
    [0]=>
    string(10) "2012-05-30"
    [1]=>
    string(10) "2012-06-07"
  }
  [2]=>
  array(2) {
    [0]=>
    string(10) "2012-06-02"
    [1]=>
    string(10) "2012-06-07"
    }
}

我想把这个数组变成

  array(6) {
    [0]=>
    string(10) "2012-05-23"
    [1]=>
    string(10) "2012-05-31"
    [2]=>
    string(10) "2012-05-30"
    [3]=>
    string(10) "2012-06-07"
    [4]=>
    string(10) "2012-06-02"
    [5]=>
    string(10) "2012-06-07"
    }

我想动态地做到这一点。我的意思是我可以在这里有一个 100 维的数组。所以一定是循环中的东西:)

【问题讨论】:

    标签: php multidimensional-array array-merge


    【解决方案1】:
    $final_array =array();
    foreach ($data as $val)
     {
        foreach($val as $val2)
         {
            $final_array[] = $val2;
         }
     }
    

    【讨论】:

    • 你可能想把它变成一个递归函数,这样不管数组有多少维它仍然可以工作。
    • @Steven1978 : 看看我的
    【解决方案2】:
    function makeArray($finalArray,$element) {
     foreach ($element as $key => $value){
      if(is_array($value)) makeArray($finalArray,$value);
      else $finalArray[] = $value;
     }
    }
    

    如果你想要一个“通用”的解决方案,这就是一个

    显然你必须第一次调用它,$finalArray 作为一个空数组,$element 作为你的起始数组

    【讨论】:

      【解决方案3】:

      使用以下代码:

      $it =  new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
      
      $l = iterator_to_array($it, false);
      

      【讨论】:

        【解决方案4】:

        php docs cmets 中有大量扁平化策略: http://php.net/manual/en/function.array-values.php

        【讨论】:

          【解决方案5】:

          我只会使用下划线 ;) http://brianhaveri.github.com/Underscore.php/

          【讨论】:

          • 看起来很有用..值得一试(:
          【解决方案6】:

          简单的搜索从PHP.net docs返回了这个

          <?php 
          /** 
           * Flattens an array, or returns FALSE on fail. 
           */ 
          function array_flatten($array) { 
            if (!is_array($array)) { 
              return FALSE; 
            } 
            $result = array(); 
            foreach ($array as $key => $value) { 
              if (is_array($value)) { 
                $result = array_merge($result, array_flatten($value)); 
              } 
              else { 
                $result[$key] = $value; 
              } 
            } 
            return $result; 
          } 
          ?>
          

          【讨论】:

            【解决方案7】:

            你可能正在寻找

            array walk recursive函数

            将用户定义的函数 funcname 应用于 输入数组。该函数将递归到更深的数组中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-02-05
              • 2015-04-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多