繁体   English   中英

PHP中将一个多维数组追加到另一个多维数组的最佳方法是什么?

[英]What is the best way in PHP to append one multidimensional array to another?

我需要粘贴几个每个包含n关联数组的索引数组(下面的示例)。 我不在乎外部数组的索引,只在乎内部数组的键。 我尝试了几种方法,(令人惊讶的)只有其中一种-最丑陋-确实有效。 所以我开始怀疑我是否缺少聪明/快速的东西。

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()方法更简单/更快/更聪明的方法?

非常确定array_merge()应该能正常工作。 也许它们并不完全相同,但实际上应该相同。 这可能是一种语义,使它无法返回true,为什么不并排打印它们并找出差异?

也可能用这种方法代替。

我认为array_merge是您要寻找的:

 $arrayC = array_merge($arrayA, $arrayB);

参见此处的工作示例: http : //codepad.org/IJ8UM6Uz

我不确定为什么OP会说array_merge不起作用:

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

//using ARRAY_MERGE
echo "<pre>";
$arrayC = array_merge($arrayA,$arrayB);
echo "ArrayC<br>";
print_r($arrayC); 

//using OP's method
$arrayD = $arrayA;
    foreach($arrayB as $value)
    {
        $arrayD[] = $value;
    }
echo "ArrayD<br>";
print_r($arrayD); 
?>

结果:

ArrayC //array_merge
Array
(
    [0] => Array
        (
            [foo] => 1
            [bar] => 2
            [baz] => 3
        )

    [1] => Array
        (
            [foo] => 12
            [bar] => 22
            [baz] => 32
        )

    [2] => Array
        (
            [foo] => 21
            [bar] => 22
            [baz] => 23
        )

    [3] => Array
        (
            [foo] => 212
            [bar] => 222
            [baz] => 232
        )

)

ArrayD //OP's method..
Array
(
    [0] => Array
        (
            [foo] => 1
            [bar] => 2
            [baz] => 3
        )

    [1] => Array
        (
            [foo] => 12
            [bar] => 22
            [baz] => 32
        )

    [2] => Array
        (
            [foo] => 21
            [bar] => 22
            [baz] => 23
        )

    [3] => Array
        (
            [foo] => 212
            [bar] => 222
            [baz] => 232
        )

)

我想知道区别...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM