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 Basics—Numeric
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 Basics—Associative
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.
LATEST COMMENTS
MC Press Online