PHP:一起添加数组

时间:2010-05-11 15:01:08

标签: php arrays

有人可以帮我解释一下吗?我有两个代码片段,一个像我期望的那样工作,但另一个没有。

此作品

$a = array('a' => 1, 'b' => 2);
$b = array('c' => 3);
$c = $a + $b;
print_r($c);

// Output
Array
(
    [a] => 1
    [b] => 2
    [c] => 3
)

这不是

$a = array('a', 'b');
$b = array('c');
$c = $a + $b;
print_r($c);

// Output
Array
(
    [0] => a
    [1] => b
)

这里发生了什么?为什么第二个版本也没有将两个数组一起添加?我误解了什么?我应该做什么呢?或者它是PHP中的错误?

6 个答案:

答案 0 :(得分:27)

记录正确无误:http://us3.php.net/manual/en/language.operators.array.php

  

+运算符将右手数组中剩余键的元素附加到左手,而重复键不会被覆盖。

所以我猜这不是php中的错误,假设发生了什么。我之前没有注意到这一点。

答案 1 :(得分:21)

要添加两个非关联数组,您需要使用array_merge函数:

  

合并一个或多个元素   数组一起使得值   一个附加到结尾   前一个。它返回结果   阵列。

     

如果输入数组相同   字符串键,然后是后面的值   该密钥将覆盖以前的密钥   一。但是,如果数组包含   数字键,后面的值不会   覆盖原始值,但会   附加。

     

如果只给出一个数组,那么   数组是数字索引,键   以连续的方式重新编制索引。

答案 2 :(得分:19)

简而言之,这是有效的,因为如果你print_r $ a和$ b你有:

Array
(
    [a] => 1
    [b] => 2
)

Array
(
    [c] => 3
)

你可以看到所有元素都有不同的键......

对于第二个示例数组,如果你打印$ a和$ b,你有:

Array
(
    [0] => a
    [1] => b
)

Array
(
    [0] => c
)

并且'a'和'c'的0键都是这里的问题,第二个数组中具有相同键的元素将被丢弃......如果你这样做:

$c = $b + $a; // instead of $c = $a + $b;

结果将是:

Array
(
    [0] => c
    [1] => b
)

答案 3 :(得分:1)

我认为这只是无证件行为,但我可能错了。无论哪种方式,如果您尝试将数组放在一起,请使用array_merge

请参阅:http://ca2.php.net/manual/en/function.array-merge.php

答案 4 :(得分:1)

在处理数组时,plus运算符不会覆盖索引,也不会重新索引数组。在您的示例中,c的索引0与a一样,因此它被丢弃。使用array_merge。

答案 5 :(得分:0)

array_splice($a,count($a),0,$b); //array $a becomes a group of $a and $b arrays.

P.S。它是索引数组(不是关联的)