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.

David Shirey

David Shirey is president of Shirey Consulting Services, providing technical and business consulting services for the IBM i world. Among the services provided are IBM i technical support, including application design and programming services, ERP installation and support, and EDI setup and maintenance. With experience in a wide range of industries (food and beverage to electronics to hard manufacturing to drugs--the legal kind--to medical devices to fulfillment houses) and a wide range of business sizes served (from very large, like Fresh Express, to much smaller, like Labconco), SCS has the knowledge and experience to assist with your technical or business issues. You may contact Dave by email at This email address is being protected from spambots. You need JavaScript enabled to view it. or by phone at (616) 304-2466.


MC Press books written by David Shirey available now on the MC Press Bookstore.

21st Century RPG: /Free, ILE, and MVC 21st Century RPG: /Free, ILE, and MVC
Boost your productivity, modernize your applications, and upgrade your skills with these powerful coding methods.
List Price $69.95

Now On Sale

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  •  

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: