0

nそれぞれ連想配列を含むいくつかのインデックス付き配列を接着する必要があります(以下の例)。外側の配列のインデックスは気にしません。内側の配列のキーだけを気にします。私はいくつかの方法を試しましたが、(驚くべきことに) そのうちの 1 つ (最も醜いもの) だけが実際に機能します。それで、私が見逃している賢い/速い何かがあるのではないかと思い始めました。

PHP バージョン: 5.3+ (問題がある場合)

これは私が持っているものです:

$arrayA = array(
        array(
            'foo' => 1,
            'bar' => 2,
            'baz' => 3
        ),
        array(
            'foo' => 12,
            'bar' => 22,
            'baz' => 32
        ),
    );

    $arrayB = array(
        array(
            'foo' => 21,
            'bar' => 22,
            'baz' => 23
        ),
        array(
            'foo' => 212,
            'bar' => 222,
            'baz' => 232
        ),
    );

これは私が持ちたいものです:

    $arrayC = array(
        array(
            'foo' => 1,
            'bar' => 2,
            'baz' => 3
        ),
        array(
            'foo' => 12,
            'bar' => 22,
            'baz' => 32
        ),
        array(
            'foo' => 21,
            'bar' => 22,
            'baz' => 23
        ),
        array(
            'foo' => 212,
            'bar' => 222,
            'baz' => 232
        ),
    );

これは私が試したことです:

    $arrayD = $arrayA;
    foreach($arrayB as $value)
    {
        $arrayD[] = $value;
    }

    $arrayE = array_push($arrayA, $arrayB);
    $arrayF = $arrayA + $arrayB;
    $arrayG = array_merge($arrayA, $arrayB);

    print_r($arrayC == $arrayD); //TRUE - it works
    print_r($arrayC == $arrayE); //FALSE
    print_r($arrayC == $arrayF); //FALSE
    print_r($arrayC == $arrayG); //FALSE

なぜ私はそれがうまくいかないと思ったarray_merge($arrayA, $arrayB)のですか:

    $arrayD = $arrayA;
    foreach($arrayB as $value)
    {
        $arrayD[] = $value;
    }

    $arrayE = array_push($arrayA, $arrayB); // <-- after this line $arrayA is already broken
    $arrayF = $arrayA + $arrayB;
    $arrayG = array_merge($arrayA, $arrayB); // because $arrayA was broken I thought it didn't work

foreach() アプローチよりも簡単/高速/賢い方法はありますか?

4

3 に答える 3

2

array_merge ()がうまく機能するはずです。まったく同じではないかもしれませんが、実質的には同じはずです。true を返さないようにブロックしているセマンティックかもしれません。それらを並べて印刷して違いを見つけてみませんか?

また、代わりにこのメソッドを使用することもできます。

于 2013-04-23T14:34:44.637 に答える