## 数组运算符

\$a + \$b 联合 \$a\$b 的联合。
\$a == \$b 相等 如果 \$a\$b 具有相同的键／值对则为 `true`
\$a === \$b 全等 如果 \$a\$b 具有相同的键／值对并且顺序和类型都相同则为 `true`
\$a != \$b 不等 如果 \$a 不等于 \$b 则为 `true`
\$a <> \$b 不等 如果 \$a 不等于 \$b 则为 `true`
\$a !== \$b 不全等 如果 \$a 不全等于 \$b 则为 `true`

`+` 运算符把右边的数组元素附加到左边的数组后面，两个数组中都有的键名，则只用左边数组中的，右边的被忽略。

`<?php\$a = array("a" => "apple", "b" => "banana");\$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");\$c = \$a + \$b; // \$a 和 \$b 的并集echo "Union of \\$a and \\$b: \n";var_dump(\$c);\$c = \$b + \$a; // \$b 和 \$a 的并集echo "Union of \\$b and \\$a: \n";var_dump(\$c);\$a += \$b; // \$a += \$b 的并集是 \$a 和 \$becho "Union of \\$a += \\$b: \n";var_dump(\$a);?>`

```Union of \$a and \$b:
array(3) {
["a"]=>
string(5) "apple"
["b"]=>
string(6) "banana"
["c"]=>
string(6) "cherry"
}
Union of \$b and \$a:
array(3) {
["a"]=>
string(4) "pear"
["b"]=>
string(10) "strawberry"
["c"]=>
string(6) "cherry"
}
Union of \$a += \$b:
array(3) {
["a"]=>
string(5) "apple"
["b"]=>
string(6) "banana"
["c"]=>
string(6) "cherry"
}
```

`<?php\$a = array("apple", "banana");\$b = array(1 => "banana", "0" => "apple");var_dump(\$a == \$b); // bool(true)var_dump(\$a === \$b); // bool(false)?>`

### User Contributed Notes 7 notes

232
cb at netalyst dot com
15 years ago
`The union operator did not behave as I thought it would on first glance. It implements a union (of sorts) based on the keys of the array, not on the values.For instance:<?php\$a = array('one','two');\$b=array('three','four','five');//not a union of arrays' valuesecho '\$a + \$b : ';print_r (\$a + \$b);//a union of arrays' valuesecho "array_unique(array_merge(\$a,\$b)):";// cribbed from http://oreilly.com/catalog/progphp/chapter/ch05.htmlprint_r (array_unique(array_merge(\$a,\$b)));?>//output\$a + \$b : Array( [0] => one [1] => two [2] => five)array_unique(array_merge(Array,Array)):Array( [0] => one [1] => two [2] => three [3] => four [4] => five)`
40
Q1712 at online dot ms
17 years ago
`The example may get u into thinking that the identical operator returns true because the key of apple is a string but that is not the case, cause if a string array key is the standart representation of a integer it's gets a numeral key automaticly. The identical operator just requires that the keys are in the same order in both arrays:<?php\$a = array (0 => "apple", 1 => "banana");\$b = array (1 => "banana", 0 => "apple");var_dump(\$a === \$b); // prints bool(false) as well\$b = array ("0" => "apple", "1" => "banana");var_dump(\$a === \$b); // prints bool(true)?>`
23
dfranklin at fen dot com
20 years ago
`Note that + will not renumber numeric array keys. If you have two numeric arrays, and their indices overlap, + will use the first array's values for each numeric key, adding the 2nd array's values only where the first doesn't already have a value for that index. Example:\$a = array('red', 'orange');\$b = array('yellow', 'green', 'blue');\$both = \$a + \$b;var_dump(\$both);Produces the output:array(3) { [0]=> string(3) "red" [1]=> string(6) "orange" [2]=> string(4) "blue" }To get a 5-element array, use array_merge. Dan`
xtpeqii at Hotmail dot com
6 years ago
`\$a=[ 3, 2, 1];\$b=[ 6, 5, 4];var_dump( \$a + \$b );output:array(3) { [0]=> int(3) [1]=> int(2) [2]=> int(1)}The reason for the above output is that EVERY array in PHP is an associative one. Since the 3 elements in \$b have the same keys( or numeric indices ) as those in \$a, those elements in \$b are ignored by the union operator.`
13
Dan Patrick
12 years ago
`It should be mentioned that the array union operator functions almost identically to array_replace with the exception that precedence of arguments is reversed.`
17
amirlaher AT yahoo DOT co SPOT uk
21 years ago
`[]= could be considered an Array Operator (in the same way that .= is a String Operator). []= pushes an element onto the end of an array, similar to array_push:<? \$array= array(0=>"Amir",1=>"needs"); \$array[]= "job"; print_r(\$array);?>Prints: Array ( [0] => Amir [1] => needs [2] => job )`
-1
Anonymous
1 year ago
`Merge two arrays and retain only unique values.Append values from second array.Do not care about keys.<?php\$array1 = [ 0 => 'apple', 1 => 'orange', 2 => 'pear',];\$array2 = [ 0 => 'melon', 1 => 'orange', 2 => 'banana',];\$result = array_keys( array_flip(\$array1) + array_flip(\$array2));?>Result:[ [0] => "apple", [1] => "orange", [2] => "pear", [3] => "melon", [4] => "banana",}`