PHPWales 2020 - June 3rd to June 4th

## Array Operators

Array Operators
Example Name Result
\$a + \$b Union Union of \$a and \$b.
\$a == \$b Equality `TRUE` if \$a and \$b have the same key/value pairs.
\$a === \$b Identity `TRUE` if \$a and \$b have the same key/value pairs in the same order and of the same types.
\$a != \$b Inequality `TRUE` if \$a is not equal to \$b.
\$a <> \$b Inequality `TRUE` if \$a is not equal to \$b.
\$a !== \$b Non-identity `TRUE` if \$a is not identical to \$b.

The + operator returns the right-hand array appended to the left-hand array; for keys that exist in both arrays, the elements from the left-hand array will be used, and the matching elements from the right-hand array will be ignored.

``` <?php\$a = array("a" => "apple", "b" => "banana");\$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");\$c = \$a + \$b; // Union of \$a and \$becho "Union of \\$a and \\$b: \n";var_dump(\$c);\$c = \$b + \$a; // Union of \$b and \$aecho "Union of \\$b and \\$a: \n";var_dump(\$c);\$a += \$b; // Union of \$a += \$b is \$a and \$becho "Union of \\$a += \\$b: \n";var_dump(\$a);?> ```
When executed, this script will print the following:
```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"
}
```

Elements of arrays are equal for the comparison if they have the same key and value.

Example #1 Comparing arrays

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

See also the manual sections on the Array type and Array functions.

### User Contributed Notes 13 notes

155
cb at netalyst dot com
11 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) ```
23
Q1712 at online dot ms
12 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)?> ```
Dan Patrick
7 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. ```
dfranklin at fen dot com
15 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 ```
amirlaher AT yahoo DOT co SPOT uk
17 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 ) ```
csaba at alum dot mit dot edu
11 years ago
``` Simple array arithmetic:A more compact way of adding or subtracting the elements at identical keys...<?phpfunction array_add(\$a1, \$a2) {  // ...  // adds the values at identical keys together  \$aRes = \$a1;  foreach (array_slice(func_get_args(), 1) as \$aRay) {    foreach (array_intersect_key(\$aRay, \$aRes) as \$key => \$val) \$aRes[\$key] += \$val;    \$aRes += \$aRay; }  return \$aRes; }function array_subtract(\$a1, \$a2) {  // ...  // adds the values at identical keys together  \$aRes = \$a1;  foreach (array_slice(func_get_args(), 1) as \$aRay) {    foreach (array_intersect_key(\$aRay, \$aRes) as \$key => \$val) \$aRes[\$key] -= \$val;    foreach (array_diff_key(\$aRay, \$aRes) as \$key => \$val) \$aRes[\$key] = -\$val; }  return \$aRes; }Example:\$a1 = array(9, 8, 7);\$a2 = array(1=>7, 6, 5);\$a3 = array(2=>5, 4, 3);\$aSum = array_add(\$a1, \$a2, \$a3);\$aDiff = array_subtract(\$a1, \$a2, \$a3);// \$aSum  => [9, 15, 18, 9, 3]// \$aDiff => [9, 1, -4, -9, -3]?>To make a similar function, array_concatenate(), change only the first of the two '+=' in array_add() to '.='Csaba Gabor from Vienna ```
-1
xtpeqii at Hotmail dot com
2 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. ```
-6
kit dot lester at lycos dot co dot uk
14 years ago
``` When comparing arrays that have (some or all) element-values that are themselves array, then in PHP5 it seems that == and === are applied recursively - that is * two arrays satisfy == if they have the same keys, and the values at each key satisfy == for whatever they happen to be (which might be arrays); * two arrays satisfy === if they have the same keys, and the values at each key satisfy === for whatever (etc.).Which explains what happens if we compare two arrays of arrays of arrays of...Likewise, the corresponding inversions for != <> and !==.I've tested this to array-of-array-of-array, which seems fairly convincing. I've not tried it in PHP4 or earlier. ```
-15
puneet singh @ value-one dot com
13 years ago
``` hi  just see one more example of union....<?php\$a = array(1,2,3);\$b = array(1,7,8,9,10);\$c = \$a + \$b; // Union of \$a and \$becho "Union of \\$a and \\$b: \n";//echo \$cprint_r(\$c);?> //outputUnion of \$a and \$b: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 9 [4] => 10 ) ```
-19
sd6733531 at gmail dot com
6 years ago
``` Look out use + with array combine.\$arr = array(1, 2, 3);\$int=345;\$arr=\$arr+\$int;Of couse,use + to combine array is easy and readable.But if one of the variable is not array type(like above code) ,that would make a PHP Fatal Error:PHP Fatal error:  Unsupported operand typesMaybe should do check before. ```
-13
kit dot lester at lycos dot co dot uk
14 years ago
``` This manual page doesn't mention < & co for arrays, but example 15-2 in     http://www.php.net/manual/en/language.operators.comparison.phpgoes to some lengths to explain how they work. ```
-2
drone dot ah at gmail dot com
2 years ago
``` The note about array comparison by Q1712 is not entirely accurate. "The identical operator just requires that the keys are in the same order in both arrays:"This may have been the case in past (I cannot verify it). It requires that the keys are in the same order AND that the values matchTo extend that example<?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)  \$b = array ("0" => "apple-1", "1" => "banana-1");  var_dump(\$a === \$b); // prints bool(false)?> ```
-35
Anonymous
5 years ago
``` The manual say ..."The + operator appends the right elements in the array from left, whereas duplicated keys are NOT overwritten"but ..\$a = array("a" => 'A', "b" => 'B');\$b = array("a" => 'A', "b" => 'B', "c" => 'C');\$c = \$a + \$b // or \$b + a  is  the same output; echo '<pre>';print_r(\$c);echo '<pre>';//Output   for  \$a + b  or  \$b + aArray (    [a] => A    [b] => B    [c] => C) ```