Flylib.com

Books Software

 
 
 

Accessing All Elements of Numerical Arrays


Accessing All Elements of Numerical Arrays


array(

'

I

'

,

'

II

'

,

'

III

'

,

'

IV

'

);



Looping through numerical arrays can most easily be done using foreach because in each iteration of the loop, the current element in the array is automatically written in a variable.

Looping Through an Array with foreach (foreach-n.php)
<?php
  $a = array('I', 'II', 'III', 'IV');
  foreach ($a as $element) {
    echo htmlspecialchars($element) . '<br />';
  }
?>

Alternatively, a for loop can also be used. The first array element has the index ; the number of array indices can be retrieved using the count() function.

Looping Through an Array with for (for-n.php)
<?php
  $a = array('I', 'II', 'III', 'IV');
  for ($i = 0; $i < count($a); $i++) {
    echo htmlspecialchars($a[$i]) . '<br />';
  }
?>

Both ways are equally good (or bad); though, usually, using foreach is the much more convenient way. However, there is a third possibility: The PHP function each() returns the current element in an array. The return value of each() is an array, in which you can access the value using the numerical index 1 , or the string index 'value' . Using a while loop, the whole array can be traversed. The following code once again prints all elements in the array, this time using each() .

Looping Through an Array with each() (each-n.php)
<?php
  $a = array('I', 'II', 'III', 'IV');
  while ($element = each($a)) {
    echo htmlspecialchars($element['value']) .
       '<br />'; //or: $element[1]
  }
?>

The output of the three listings is always the same, of course.



Accessing All Elements of Associative Arrays


foreach ($array as $key => $value) {



When using an associative array and wanting to access all data in it, the keys are also of relevance. For this, the foreach loop must also provide a variable name for the element's key, not only for its value.

Looping Through an Associative Array with foreach (foreach-a.php)
<?php
  foreach ($array as $key => $value) = array('one'
    => 'I', 'two' => 'II', 'three' => 'III', 'four'
    => 'IV');
  foreach ($array as $key => $value) {
    echo htmlspecialchars("$key: $value") . '<br />';
  }
?>

Using count() is possible: count() returns the number of values in the array, not the number of elements. Looping through all array elements with for is not feasible . However, the combination of each() and while can be used, as can be seen in the following code. The important point is that the key name can be retrieved either using the index or the string index 'key' .

Looping Through an Array with each() (each-a.php)
<?php
  $a = array('one' => 'I', 'two' => 'II', 'three' =>
    'III', 'four' => 'IV');
  while ($element = each($a)) {
    echo htmlspecialchars($element['key'] . ': ' .
      $element['value']) . '<br />';
    //or: $element[0] / $element[1]
  }
?>



Accessing All Array Elements in Nested Arrays


print_r($a);



Nested arrays can be printed really easily by using print_r() . Take a look at the output of the listing in Figure 2.1.

Printing a nested array with print_r() (print_r.php)
<pre>
<?php
  $a = array(
    'Roman' =>
      array('one' => 'I', 'two' => 'II', 'three' =>
        'III', 'four' => 'IV'),
    'Arabic' =>
      array('one' => '1', 'two' => '2', 'three' =>
        '3', 'four' => '4')
  );
  print_r($a);
?>
</pre>

Figure 2.1. Printing array contents with print_r() .


TIP

If you set the second parameter of print_r() to true , the array's contents are not sent to the client, but are returned from the function, so that you can save this information in a variable and process it further.


However, the output of the preceding code is hardly usable for more than debugging purposes (see Figure 2.1). Therefore, a clever way to access all data must be found. A recursive function is a reasonable way to achieve this. In this, all elements of an array are printed out; the whole output is indented using the HTML element <blockquote> . If, however, the array element's value is an array itself, the function calls itself recursively, which leads to an additional level of indention. Whether something is an array can be determined using the PHP function is_array() . Using this, the following code can be assembled . See Figure 2.2 for the result.

Printing a Nested Array Using a Recursive Function (printNestedArray.php)
<?php
  function printNestedArray($a) {
    echo '<blockquote>';
    foreach ($a as $key => $value) {
      echo htmlspecialchars("$key: ");
      if (is_array($value)) {
        printNestedArray($value);
      } else {
        echo htmlspecialchars($value) . '<br />';
      }
    }
    echo '</blockquote>';
  }

  $arr = array(
    'Roman' =>
      array('one' => 'I', 'two' => 'II', 'three' =>
        'III', 'four' => 'IV'),
    'Arabic' =>
      array('one' => '1', 'two' => '2', 'three' =>
        '3', 'four' => '4')
  );

  printNestedArray($arr);
?>

Figure 2.2. Printing array contents using a recursive function.