PHP数组联合+解释

时间:2012-10-07 05:06:08

标签: php arrays union

下面我有以下数组,对union运算符进行实验。

$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中不存在,因此它不会添加到它。

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

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

任何人都能解释一下吗?

4 个答案:

答案 0 :(得分:2)

使用+追加数组,按键检查过程,而不是值。

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

因此对于$b + $a$b中的值不会被覆盖,因此结果仍为array(1, 2, 3, 4, 5)

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

答案 1 :(得分:1)

+获取最左边的变量并首先使用其所有值。如果它的所有值都用完了,但是左边的条目数量少于右边的条目数量,那么它会用正确的值填充其余的值。

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

$foobar = $foo + $boo;

首先,$foobar填充了$foo中的内容,但是,由于$boo的长度大于$foo,因此填充了$foobar $boo的{​​{1}}值所在的值$foo。因此,第一个值被忽略,因为它已被$foo使用,但第二个值尚未被合并。

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

答案 2 :(得分:1)

我认为您误解了+运算符与array的对应关系。 当+用于array时,它基本上按keys而不是values合并2个数组

例如。我会解释为什么$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)

答案 3 :(得分:0)

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

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

如果(第二个操作数) $ b 有更多&#34;键值对&#34; 而不是 $ a .. < / p>

$ 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