array_merge删除我的重复项

时间:2018-04-27 19:39:14

标签: php arrays

我正在向$result数组中添加几个数组。

在下面找我正在做的事情:

$res = array();

$arr1 = array("key1" => array("10","12"));
$arr2 = array("key2" => array("1","11"));
$arr3 = array("key1" => array("10","12"));
$arr4 = array("key2" => array("1","11"));

$res = array_merge($res, $arr1);
$res = array_merge($res, $arr2);
$res = array_merge($res, $arr3);
$res = array_merge($res, $arr4);

print_r($res);

// OUTPUT:
// #######
Array
(
    [key1] => Array
        (
            [0] => 10
            [1] => 12
        )

    [key2] => Array
        (
            [0] => 1
            [1] => 11
        )

)

但是,我希望得到以下输出:

Array
(
    [key1] => Array
        (
            [0] => 10
            [1] => 12
        )

    [key2] => Array
        (
            [0] => 1
            [1] => 11
        )
    [key1] => Array
        (
            [0] => 10
            [1] => 12
        )

    [key2] => Array
        (
            [0] => 1
            [1] => 11
        )

)

如您所见,我想将重复的数组添加到我的结果数组中。

为什么array_merge会替换重复的合并以及如何改变这种行为的任何建议?

感谢您的回复!

2 个答案:

答案 0 :(得分:3)

评论说答案是否定的。钥匙本质上是独一无二的。 PHP使用密钥来定位关联的值。

你无法完成你想要的结构,但如果你想要的只是在一个数组结构中拥有所有值,你可以使用这个代码完成它:

$res = array();

$res[] = array("key1" => array("10","12"));
$res[] = array("key2" => array("1","11"));
$res[] = array("key1" => array("10","12"));
$res[] = array("key2" => array("1","11"));

var_dump($res);
// You'll see all your arrays in one structure

答案 1 :(得分:2)

这本来是一个评论,但结果太长了。

您需要了解数组的工作原理,这只是一个简短的小解释。 假设你有一个数组:

$array = array(
    'key1' => 'Hello ',
    'key2' => 'World',
    'key1' => 'Foo ',
    'key2' => 'Bar',
);

现在我们尝试使用它:

echo $array['key1'].$array['key2'];

如果我们可以使用相同的键,哪一个会被打印? Hello worldFoo bar?或混合?

实际输出为Foo bar,因为最后两个将覆盖第一个。

Here是一篇更详细(和更高级)的文章,解释了PHP如何处理数组。