67

PHPでn個の配列をマージする方法. つまり、次のような仕事をどのように行うことができますか:
array_merge(from : $result[0], to : $result[count($result)-1])
OR
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)
)
4

4 に答える 4

188

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エラーが発生します。

于 2013-06-11T09:56:18.803 に答える
3

complex857 からの回答はとても気に入りましたが、保持する必要のある配列に数値キーがあったため、うまくいきませんでした。

+演算子を使用してキーを保存し ( PHP array_merge with numeric keys で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
)
于 2016-06-10T12:21:46.213 に答える
0

これを試して

$result = array_merge($array1, $array2);

または、array_merge の代わりに、ユニオンを実行する + op を使用できます。

$array2 + array_fill_keys($array1, '');
于 2013-06-11T09:56:11.707 に答える