Recipe 4.2. Storing Multiple Elements Per Key in an Array


4.2.1. Problem

You want to associate multiple elements with a single key.

4.2.2. Solution

Store the multiple elements in an array:

$fruits = array('red' => array('strawberry','apple'),                 'yellow' => array('banana'));

Or use an object:

while ($obj = mysql_fetch_object($r)) {     $fruits[] = $obj; }

4.2.3. Discussion

In PHP, keys are unique per array, so you can't associate more than one entry in a key without overwriting the old value. Instead, store your values in an anonymous array:

$fruits['red'][] = 'strawberry'; $fruits['red'][] = 'apple'; $fruits['yellow'][] = 'banana';

Or, if you're processing items in a loop:

while (list($color,$fruit) = mysql_fetch_array($r)) {     $fruits[$color][] = $fruit; }

To print the entries, loop through the array:

foreach ($fruits as $color=>$color_fruit) {     // $color_fruit is an array     foreach ($color_fruit as $fruit) {         print "$fruit is colored $color.<br>";     } }

Or use the pc_array_to_comma_string( ) function from Recipe 4.9.

foreach ($fruits as $color=>$color_fruit) {     print "$color colored fruits include " .         pc_array_to_comma_string($color_fruit) . "<br>"; }

In PHP 5.0.0 and above, you don't need pc_array_range( ): just pass an increment to range( ) as a third argument:

$odd = range(1, 52, 2); $even = range(2, 52, 2);

4.2.4. See Also

Recipe 4.9 for how to print arrays with commas.




PHP Cookbook, 2nd Edition
PHP Cookbook: Solutions and Examples for PHP Programmers
ISBN: 0596101015
EAN: 2147483647
Year: 2006
Pages: 445

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net