PHP:一起添加数组

Svi*_*ish 40 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
)
Run Code Online (Sandbox Code Playgroud)

事实并非如此

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

// Output
Array
(
    [0] => a
    [1] => b
)
Run Code Online (Sandbox Code Playgroud)

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

小智 28

这是记录和正确的:http://us3.php.net/manual/en/language.operators.array.php

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

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


acm*_*acm 22

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

Array
(
    [a] => 1
    [b] => 2
)
Run Code Online (Sandbox Code Playgroud)

Array
(
    [c] => 3
)
Run Code Online (Sandbox Code Playgroud)

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

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

Array
(
    [0] => a
    [1] => b
)
Run Code Online (Sandbox Code Playgroud)

Array
(
    [0] => c
)
Run Code Online (Sandbox Code Playgroud)

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

$c = $b + $a; // instead of $c = $a + $b;
Run Code Online (Sandbox Code Playgroud)

结果将是:

Array
(
    [0] => c
    [1] => b
)
Run Code Online (Sandbox Code Playgroud)

  • 对正在发生的事情的很好的视觉解释。 (2认同)

And*_*are 21

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

将一个或多个数组的元素合并在一起,以便将一个值的值附加到前一个数组的末尾.它返回结果数组.

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键.但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加.

如果只给出一个数组并且数组被数字索引,那么键将以连续的方式重新索引.