PHP - 如何在数组内合并数组

2022-08-30 08:50:19

如何在php中合并n个数组。我的意思是我怎么能做这样的工作:

array_merge(from : $result[0], to : $result[count($result)-1])
array_merge_recursive(from: $result[0], to : $result[count($result) -1])


其中是一个数组,其中包含多个数组,如下所示:$result

$result = Array(
0 => array(),//associative array
1 => array(),//associative array
2 => array(),//associative array
3 => array()//associative array
)

我的结果是:

$result = Array(
    0 => Array(
        "name" => "Name",
        "events" => 1,
        "types" => 2
    ),
    1 => Array(
        "name" => "Name",
        "events" => 1,
        "types" => 3
    ),
    2 => Array(
        "name" => "Name",
        "events" => 1,
        "types" => 4
    ),
    3 => Array(
        "name" => "Name",
        "events" => 2,
        "types" => 2
    ),
    4 => Array(
        "name" => "Name",
        "events" => 3,
        "types" => 2
    )
)

我需要的是

$result = Array(
"name" => "name",
"events" => array(1,2,3),
"types" => array(2,3,4)
)

答案 1

array_merge可以接受可变数量的参数,因此只需call_user_func_array一点技巧,您就可以将数组传递给它:$result

$merged = call_user_func_array('array_merge', $result);

这基本上就像你键入的那样运行:

$merged = array_merge($result[0], $result[1], .... $result[n]);

更新:

现在在 5.6 中,我们有 ...运算符将数组解压缩为参数,因此您可以:

$merged = array_merge(...$result);

并有相同的结果。*

*只要解压缩数组中有整数键,结果就相同,否则您将收到错误。E_RECOVERABLE_ERROR : type 4096 -- Cannot unpack array with string keys


答案 2

我真的很喜欢complex857的答案,但它对我不起作用,因为我的数组中有数字键需要保留。

我使用运算符来保留键(如PHP array_merge中建议的那样,使用数字键)并用于合并数组。+array_reduce

因此,如果要在保留数字键的同时合并数组内的数组,可以按如下方式进行:

<?php
$a = [
    [0 => 'Test 1'],
    [0 => 'Test 2', 2 => 'foo'],
    [1 => 'Bar'],
];    

print_r(array_reduce($a, function ($carry, $item) { return $carry + $item; }, []));
?>

结果:

Array
(
    [0] => Test 1
    [2] => foo
    [1] => Bar
)

推荐