【问题标题】:Converting a nested array to single dimensional array将嵌套数组转换为一维数组
【发布时间】:2016-12-16 11:19:44
【问题描述】:

我有一个数组:

Array
(
    [0] => Array
        (
            [2010] => 2010
        )

    [1] => Array
        (
            [2011] => 2011
        )

    [2] => Array
        (
            [2012] => 2012
        )

    [3] => Array
        (
            [2013] => 2013
        )

    [4] => Array
        (
            [2014] => 2014
        )

    [5] => Array
        (
            [2015] => 2015
        )

    [6] => Array
        (
            [2016] => 2016
        )

)

我想转换成的

array(
[2010] => 2010
[2011] => 2011
[2012] => 2012
)

我写了一个这样的函数:

foreach($arr as $a)
{
   foreach($a as $k=>$sub)
   {
      $newArr[$k] = $sub;
   }
}

我做得对吗?

【问题讨论】:

  • 你的代码没有错。
  • 我做得对吗? -- if(solution is working) { yes } else { no };
  • 您的意思是指性能问题吗?
  • 你使用了多余的foreach循环,一个循环就足够了

标签: php


【解决方案1】:

记住What's the difference between array_merge and array + array?

在“endresult”数组上使用 += 会将给定数组添加到当前数组中。上面的链接中解释了一些注意事项,以防出现重叠键。

$arr = [[2012 => 'foo'],[2014 => 'bar'],[2015=>'baz']];
$new = [];
foreach($arr as $i) {
  $new += $i;
}
echo "<PRE>";
var_dump($new);

实时示例:https://ideone.com/olydNq

【讨论】:

    【解决方案2】:

    请试试这个

    $array = Array
    (
        '0' => Array
            (
                '2010' => 2010,
            ),
    
        '1' => Array
            (
                '2011' => 2011,
            ),
    
        '2' => Array
            (
                '2012' => 2012,
            ),
    
        '3' => Array
            (
                '2013' => 2013,
            ),
    
        '4' => Array
            (
                '2014' => 2014,
            ),
    
        '5' => Array
            (
                '2015' => 2015,
            ),
    
        '6' => Array
            (
                '2016' => 2016,
            ),
    
    );
    
    $oneDimensionalArray = call_user_func_array('array_merge', $array);
    foreach($oneDimensionalArray as $_oneDimensionalArray)
    {
         $newArr[$_oneDimensionalArray] = $_oneDimensionalArray;
    }   
    print_r($newArr)
    

    【讨论】:

      【解决方案3】:

      请检查此代码,它也适用于未格式化的数组结构

      <?php
      $array = array
      (
          'aaaaa',
          10,
          '0' => array
              (
                  '2010' => 2010,
              ),
      
          '1' => array
              (
                  '2011' => 2011,
              ),
      
          '2' => array
              (
                  '2012' => 2012,
              ),
      
          '3' => array
              (
                  '2013' => 2013,
              ),
      
          '4' => array
              (
                  '2014' => 2014,
              ),
      
          '5' => array
              (
                  '2015' => 2015,
              ),
      
          '6' => array
              (
                  '2016' => 2016,
                  '2017' => 2017,
                  'xxxx' => 'yyyy',
              ),
      
      );
      
      
      
      $newArr=array();
      
      
      
      function walk_first($val, $key)
      {
          if(is_array($val))
          {
          array_walk($val, 'walk_second');
          }
      }
      function walk_second($val, $key)
      {
          global $newArr;
          $newArr[$key]=$val;
      }
      array_walk($array, 'walk_first');
      
      print_r($newArr);
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-18
        • 1970-01-01
        • 2012-07-19
        • 2015-12-22
        • 2014-12-30
        • 2018-02-10
        • 2022-01-09
        • 2016-09-28
        相关资源
        最近更新 更多