PHP

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.

Printing a nested array with print_r()

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

Printing array contents with print_r().

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. 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 for the result.

Printing a Nested Array Using a Recursive Function

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

Printing array contents using a recursive function.

by BrainBellupdated
Advertisement: