Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Language Reference : Operators : Array Operators

Array Operators

Table 6.8. 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 appends elements of remaining keys from the right handed array to the left handed, whereas duplicated keys are NOT overwritten.

<?php
$a
= array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");

$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);

$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>

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"
} ?>

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

Example 6.7. 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.

Code Examples / Notes » language.operators.array

amirlaher

[]= 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 )


kit dot lester

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.


texbungalow

use '+=' to quickly append an array to another one:
function roman ($nr ) {
     $base_digits= array (
           1=> "I",
           10=> "X",
           100=> "C",
           1000=> "M",
           );
     $help_digits= array (
           5=> "V",
           50=> "L",
           500=> "D",
           );
     $all_digits= $base_digits+ $help_digits;
     foreach ($base_digits as $key1=> $value1 )
           foreach ($all_digits as $key2=> $value2 )
                 if ($key1< $key2 )
                       $segments[$key2- $key1 ]= $value1. $value2;
     $segments+= $all_digits;
     krsort ($segments );
     foreach ($segments as $key=> $value )
           while ($key<= $nr ) {
                 $nr-= $key;
                 $str.= $value;
                 }
     return $str;
     }
echo roman (888);   //  prints DCCCLXXXVIII


kit dot lester

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.


q1712

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)
?>


peter

The code from texbungalow at web dot de below is slightly incorrect.  If my memory from primary school history is correct, roman numerals don't allow things like MIM - it has to be MCMXCIX, ie each step is only 1 level down (sorry, I can't explain it very well.
a print_r($segments) comparing the snippets should explain.
Corrected code:
<?php
function roman ($nr ) {
    $base_digits= array (
          1=> "I",
          10=> "X",
          100=> "C",
          1000=> "M",
          );
    $help_digits= array (
          5=> "V",
          50=> "L",
          500=> "D",
          );
    $all_digits= $base_digits+ $help_digits;
    foreach ($base_digits as $key1=> $value1 )
          foreach ($all_digits as $key2=> $value2 )
                if ($key1< $key2 && $key1 >= ($key2 / 10))
                      $segments[$key2- $key1 ]= $value1. $value2;
    $segments+= $all_digits;
    krsort ($segments );
    foreach ($segments as $key=> $value )
          while ($key<= $nr ) {
                $nr-= $key;
                $str.= $value;
                }
    return $str;
    }
echo roman (1998);   //  prints MCMXCVIII
?>


dfranklin

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


puneet singh @ value-one dot com

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 )


Change Language


Follow Navioo On Twitter
Operator Precedence
Arithmetic Operators
Assignment Operators
Bitwise Operators
Comparison Operators
Error Control Operators
Execution Operators
Incrementing/Decrementing Operators
Logical Operators
String Operators
Array Operators
Type Operators
eXTReMe Tracker