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' values
echo '$a + $b : ';
print_r ($a + $b);
//a union of arrays' values
echo "array_unique(array_merge($a,$b)):";
// cribbed from http://oreilly.com/catalog/progphp/chapter/ch05.html
print_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
)
Operadores de Arrays
| Exemplo | Nome | Resultado |
|---|---|---|
| $a + $b | União | União de $a e $b. |
| $a == $b | Igualdade | TRUE se $a e $b tem os mesmos pares de chave/valor. |
| $a === $b | Identidade | TRUE se $a e $b tem os mesmos pares de chave/valor
na mesma ordem e do mesmo tipo. |
| $a != $b | Desigualdade | TRUE se $a não é igual a $b. |
| $a <> $b | Desigualdade | TRUE se $a não é igual a $b. |
| $a !== $b | Não identidade | TRUE se $a não é identico a $b. |
O operador + acrescenta os elementos da direita no array da esquerda, contudo, chaves duplicadas NÃO são sobrescritas.
<?php
$a = array("a" => "maçã", "b" => "banana");
$b = array("a" =>"pêra", "b" => "framboesa", "c" => "morango");
$c = $a + $b; // Uniao de $a e $b
echo "União de \$a e \$b: \n";
var_dump($c);
$c = $b + $a; // União de $b e $a
echo "União de \$b e \$a: \n";
var_dump($c);
?>
União de $a e $b:
array(3) {
["a"]=>
string(5) "maçã"
["b"]=>
string(6) "banana"
["c"]=>
string(6) "morango"
}
União de $b e $a:
array(3) {
["a"]=>
string(4) "pêra"
["b"]=>
string(10) "framboesa"
["c"]=>
string(6) "morango"
}
Elementos do array são iguais para efeitos de comparação se eles possuem o mesmo valor e chave.
Exemplo #1 Comparando arrays
<?php
$a = array("maçã", "banana");
$b = array(1 => "banana", "0" => "maçã");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>
Veja também as seções do manual sobre o tipo Array e funções de manipulação de Arrays.
cb at netalyst dot com ¶
4 years ago
sd6733531 at gmail dot com ¶
3 months 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 types
Maybe should do check before.
Dan Patrick ¶
1 year 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.
csaba at alum dot mit dot edu ¶
5 years ago
Simple array arithmetic:
A more compact way of adding or subtracting the elements at identical keys...
<?php
function 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
kit dot lester at lycos dot co dot uk ¶
7 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.
puneet singh @ value-one dot com ¶
7 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 $b
echo "Union of \$a and \$b: \n";
//echo $c
print_r($c);
?>
//output
Union of $a and $b: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 9 [4] => 10 )
csaba at alum dot mit dot edu ¶
5 years ago
Simple array arithmetic:
If you want to add or subtract the elements at identical keys...
<?php
function array_add($a1, $a2) { // ...
// adds the values at identical keys together
$aRes = $a1;
$aRays = func_get_args();
for ($i=1;$i<sizeof($aRays);++$i) {
$aRay = $aRays[$i];
foreach ($aRay as $key => $val)
if (array_key_exists($key, $aRes))
$aRes[$key] += $aRay[$key];
$aRes += $aRay; }
return $aRes; }
function array_subtract($a1, $a2) { // ...
// subtracts the values at identical keys from the corresponding value in $a1
$aRes = $a1;
$aRays = func_get_args();
for ($i=1;$i<sizeof($aRays);++$i) {
$aRay = $aRays[$i];
foreach ($aRay as $key => $val) {
if (array_key_exists($key, $aRes)) $aRes[$key] -= $aRay[$key];
else $aRes[$key] = -$aRay[$key]; } }
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 the first += only in array_add() to .=
Csaba Gabor from Vienna
amirlaher AT yahoo DOT co SPOT uk ¶
10 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 )
dfranklin at fen dot com ¶
9 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
Q1712 at online dot ms ¶
6 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)
?>
kit dot lester at lycos dot co dot uk ¶
7 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.php
goes to some lengths to explain how they work.
