0

我在下面有以下数组,对联合运算符进行了实验。

$a = array(1,2,3,6);

$b = array(1, 2, 3, 4, 5);

$c =  $b + $a;

$c 似乎是 1,2,3,4,5

因此,我假设数组 $b 是针对数组 $a 检查的。$b 中不存在 6,因此不会添加到其中。

现在,如果我将其切换为 $c = $a + $b,我只期望 (1,2,3,6)。

但是,实际输出为 (1,2,3,6,5)。

谁能解释一下?

4

4 回答 4

2

用于+追加数组,该过程是通过键而不是值来检查的。

array_merge不同的是,当你使用 时+,第二个数组中的值不会用相同的键覆盖第一个数组中的值。

所以对于$b + $a,不会$b覆盖任何值,所以结果仍然是array(1, 2, 3, 4, 5)

对于$a + $b1,2,3,6将保留 ,并附加额外的值6,因此结果将为array(1,2,3,6,5)

于 2012-10-07T05:26:08.423 回答
2

我认为您误解了+operator 如何使用array. 什么时候+用于array它基本上keys不合并2个数组values

例如。我将解释为什么$c结果与您预期的不同。

# $a = array(1,2,3,6);
$a = array(
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 6
);
# $b = array(1, 2, 3, 4, 5);
$b = array(
  0 => 1, 
  1 => 2, 
  2 => 3, 
  3 => 4, 
  4 => 5
);

// the + operator simply do this
$c[0] = $a[0] + $b[0]; // yield 1
...
...
$c[3] = $a[3] + $b[3]; // yield 6

$c; // yield array(1,2,3,6,5)
于 2012-10-07T05:32:14.297 回答
1

+最左边的变量并首先使用它的所有值。如果它的所有值都用完了,但左边的条目数量少于右边的条目,它将用右边的条目填充其余部分。

$foo = array("foo");
$boo = array(true, "bar");

$foobar = $foo + $boo;

首先,$foobar用 中的内容填充$foo,但随后,由于 的长度$boo大于$foo$foobar因此由$boo的值填充$foo。所以第一个值被忽略,因为它已经被 使用过$foo,但是第二个值还没有被合并。

这个概念也适用于定义数组的键时(即,$arr['location'] 而不是 $arr[])。右边的键不会覆盖左边的。

于 2012-10-07T05:08:40.963 回答
0

解释$c = $a + $b 的最简单方法。

$c首先获取(第一个操作数)$a的“键值对”

如果(第二个操作数)$b“键值对”多于$a ..

然后$c将多余的$b添加 到数组的末尾。

否则,$c仍然等同于$a

$a =   
  0 => 2,
  1 => 5,
  2 => 8,

$b =   
  0 => 9,
  1 => 2,
  2 => 1,
  3 => 5,
  4 => 6,

$c =   
  0 => 2,
  1 => 5,
  2 => 8,
  3 => 5,  //From $b
  4 => 6,  //From $b
于 2014-06-08T14:22:55.330 回答