将嵌套数组转换为单维数组


Converting a nested array to single dimensional 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
        )
)

我想把它转换成

array(
[2010] => 2010
[2011] => 2011
[2012] => 2012
)
我写了一个这样的函数:
foreach($arr as $a)
{
   foreach($a as $k=>$sub)
   {
      $newArr[$k] = $sub;
   }
}

我做的对吗?

记住array_merge和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

请试试这个

$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)

请检查此代码,它也适用于未规定的数组结构

<?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);
?>