PHP: Variables, Arrays, and Functions, Part 3

Scripting
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Use the foreach PHP command to get data out of a mult-dimensional array.

 

We're going to do one last piece related to arrays in PHP. Why? Because when you're using PHP to put data out onto a page or read data in from a page, you'll use arrays as the intermediary between your file and your page. Consequently, knowing how to deal with them is very important.

Before we get into the last element of this (using the foreach PHP statement), let's take a moment to review what we've learned so far (part 1 and part 2).

Array BasicsNumeric

Let's re-start at the beginning. There are two kinds of arrays for PHP.

The first is the numeric array, which is just a simple array. It can have x number of values, and each value is subscripted by a number starting with 0 (not 1 like RPG). You define the array just as a variable with the array() declension:

$MyArray = array();

Array BasicsAssociative

The other type of array that we looked at is the associative. This has subscripts, but they're not numbers; rather, they're more of a category. So $MyArray can have subscripts of 'name', 'address 1', 'city', etc. These subscripts are referred to as properties, and the values given to each of these properties are called the values. Here's an example:

$MyArray['name'] = 'William Roberts';

$MyArray['city']     = 'Washington';

It's these associative arrays that we're most interested in because they basically mimic a file structure. Specifically, we're most interested in the two-dimensional (or above) associative arrays; they look like file records, so it's natural to think of them when you're writing or reading data to or from a database.

Retrieving Two-Dimensional Array Data

In the first article, we saw how to put data in a two-dimensional array.

$MyArray = array(array('name'=>'David', 'city'=>'Petosky'),

                     array('name'=>'Dave', 'city'=>'Grand Haven'),

                      array('name'=>'Dave', 'city'=>'Grand Rapids')

                       );

And in the second article, we saw how to mix HTML code and PHP scripts to display both data and text on a web page. The last step in the process is to be able to extract the data from the two-dimensional array and display it on a page.

If we were in RPG dealing with a file, we would do a loop and read through the records, processing each one as we go. Wouldn't it be nice if PHP were as simple? Let's take an example of a situation where we've read a table, we've deposited the row information in a two-dimensional array, and now we want to get that data out and display it on the page.

One way to do that is with a foreach loop like the one below.

foreach ($MyArray as $property=>$value) {

     'php/html code to display data';

}

The foreach, of course, is a looping facility in PHP that we'll use. For more info on it, you can see this or that or the other thing. Basically, it will read through $MyArray, picking up the values for the property part of the associative array. If we use our example from above, the property elements are 'name', 'city', etc. It's not the value of each of these, like 'Dave' or 'Toronto', but rather the field name that we would use for a column header. For example:

foreach ($MyArray as $property=>$value) {

                    echo $value['name'] .;

                    echo $value['city'], "<br />";

               }

Consequently, this code would display the data as shown below. The "<br />" is HTML to move you down to a new line, and the period (.) before the semicolon inserts a space. Also note that the foreach statement doesn't have a semicolon after it. But the executable statements within it do.

David Petosky

Dave   Grand Haven

Dave   Grand Rapids

Sorting Associative Arrays

Of course, many times when you're displaying data, you need to have it in a particular order. Naturally, you can always take care of this by using an indexed file or table, but one of the nice things about arrays in PHP is that you can sort them, much like you can now sort data structures in RPG (if you're on 6.1). There are two basic types of sorts that you can do. What we're going to talk about now is the ability to sort a one-dimensional associative array.

ASORT

The ASORT function will sort things in terms of the value associated with the array. A good example is if you had an array as such and wanted to sort it by population.

$MyArray = array('New York'=>'8,000,000', 'Chicago'=>'4,000,000', 'LA'=>'3,000,000');

asort(&MyArray);

foreach ($MyArray as $property=>$value) {

      echo $property . $value . "<br />";

}

The result will look like this:

3,000,000

8,000,000

9,000,000

KSORT

The KSORT function will sort things in terms of the "key" or as we have called it before, the property.

$MyArray = array('New York'=>'8,000,000', 'Chicago'=>'4,000,000', 'LA'=>'3,000,000');

ksort(&MyArray);

foreach ($MyArray as $value) {

echo $value . "<br />";

}

The result will look like this:

4,000,000

3,000,000

8,000,000

This result is consistent with a listing of Chicago, LA, New York.

Sorting Multi-Dimensional Arrays

We've been talking mostly about multi-dimensional arrays, so let's look at sorting those. It's not as simple as an ASORT or KSORT, but it's not bad. For example, suppose I want to store multiple addresses in my array.

$MyArray = array( array('name'=>'John Smith', 'Address'=>'1304 S St.'),

                                     array('name'=>'Walter Alston', 'Address'=>657 Ventura Blvd'),

                                     array('name'=>'Col. Ruppert', 'Address'=>'1E 161st Street'),

                      array('name'=>'John Smith','Address'=>'6719 Easton Avenue')

                                 );

This sets up a two-dimensional array with columns being 'name' and 'address', and the rows being 0, 1, 2. Accessing this information is easy:

$MyArray (1) ('address') is 657 Ventura Blvd.

To access data from such an array, you'll probably use a foreach loop.

<?php

foreach ($MyArray as $key => $row)   {

      $name[$key]     = $row['name'];

      $Address[$key] = $row['Address'];

}

array_multisort($name, SORT_ASC, $Address, SORT_DESC, $MyArray);

?>

Here, we're sorting the array $MyArray by name first in ascending order and then by $Address in descending order. And the data would look like this:

Col. Ruppert     1E 161st Street

John Smith       6719 Easton Avenue

John Smith      1304 S. St.

Walter Alston 657 Ventura

Summary

And that's about it, boys and girls. There's more we could say, but "the clock on the wall says three o'clock." And we may be done, for awhile, with PHP topics. But there's lots of other interesting stuff to talk about, and we certainly will.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$0.00 Raised:
$