是否有更简单的方法来取消嵌套数组?

时间:2014-10-09 15:55:14

标签: php arrays multidimensional-array

所有

你将如何" un-nest"一个数组,使其更容易循环?

你如何转换下面的数组...

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [key1] => data1
                    [key2] => data2
                    [key3] => data3
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [key1] => data4
                    [key2] => data5
                    [key3] => data6
                )

        )
)

对于像这样可管理的东西......?

Array
(
    [0] => Array {
        [key1] => data1
        [key2] => data2
        [key3] => data3
        }
    [1] => Array (
        [key1] => data4
        [key2] => data5
        [key3] => data6
        )
)

2 个答案:

答案 0 :(得分:7)

是的,有!

 $newArray = array_map('end', $oldArray);

此代码仅将end应用于源数组的每个元素,并将结果收集到新数组中。例如,如果这样的元素是

Array
    (
        [0] => Array
            (
                [key1] => data1
                [key2] => data2
                [key3] => data3
            )
    )

end的结果将是

        Array
            (
                [key1] => data1
                [key2] => data2
                [key3] => data3
            )

基本上end“展开”内部数组,从而摆脱一个嵌套级别。由于始终只有一个子阵列,因此您也可以使用currentreset具有相同的效果。

答案 1 :(得分:0)

接受的答案适用于测试用例,但以下几乎适用于(?)任何数组:

$newArray = array_reduce($oldArray, 'array_merge', []));

这从第一个值和[]开始运行array_merge,然后是第二个值和第一个array_merge的结果,依此类推,直到返回合并携带的结果值和最终值。这具有展开 1 层的效果。

示例:

$a = [ [ [ 'key1' => 'data1' ], [ 'key1' => 'data2' ] ], [ [ 'key1' => 'data3' ] ] ];
$a = array_reduce($a, 'array_merge', []);
print_r($a);

// output:
Array
(
    [0] => Array
        (
            [key1] => data1
        )

    [1] => Array
        (
            [key1] => data2
        )

    [2] => Array
        (
            [key1] => data3
        )

)
相关问题