MC Press Online

Saturday, Jun 24th

Last updateFri, 23 Jun 2017 1pm

You are here: Home ARTICLES Programming Scripting PHP: Variables, Arrays, and Functions, Part 3

Programming / Scripting

PHP: Variables, Arrays, and Functions, Part 3

SUPPORT MC PRESS - VISIT OUR SPONSORS

NEW BOOK!

IBM i Security Administration and Compliance


ORDER YOUR COPY

*******************

Click for this Month's

Bookstore Special Deals

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

Dave Shirey is president of Shirey Consulting Services (www.shireyllc.com), 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 dave@shireyllc.com or phone at 616 304 2466.  

BLOG COMMENTS POWERED BY DISQUS