|
Array OperatorsTable 6.8. Array Operators
The <?php When executed, this script will print the following: Union of $a and $b: Elements of arrays are equal for the comparison if they have the same key and value. Example 6.7. Comparing arrays<?php See also the manual sections on the Array type and Array functions. Code Examples / Notes » language.operators.arrayamirlaher
[]= 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 ) |