Read an Excerpt
Chapter 3: Using Arrays
This chapter shows you how to use an important programming
constructarrays. The variables that we looked at in the previous chapters
are scalar variables, which store a single value. An array is a
variable that stores a set or sequence of values. One array can have many
elements. Each element can hold a single value, such as text or numbers, or
another array. An array containing other arrays is known as a multidimensional
PHP supports both numerically indexed and associative arrays. You will
probably be familiar with numerically indexed arrays if you've used a
programming language, but unless you use PHP or Perl, you might not have seen
associative arrays before. Associative arrays let you use more useful values as
the index. Rather than each element having a numeric index, they can have words
or other meaningful information.
We will continue developing the Bob's Auto parts example using arrays to
work more easily with repetitive information such as customer orders. Likewise,
we will write shorter, tidier code to do some of the things we did with files in
the previous chapter.
Key topics covered in this chapter include
What Is an Array?
We looked at scalar variables in Chapter 1, "PHP Crash Course." A
scalar variable is a named location in which to store a value; similarly, an
array is a named place to store a set of values, thereby allowing you to
group common scalars.
Bob's product list will be the array for our example. In Figure
3.1, you can see a list of three products stored in an array format and
one variable, called $products, which stores the three values. (We'll
look at how to create a variable like this in a minute.)
Bob's products can be stored in an array.
After we have the information as an array, we can do a number of useful
things with it. Using the looping constructs from Chapter 1, we can save work by
performing the same actions on each value in the array. The whole set of
information can be moved around as a single unit. This way, with a single line
of code, all the values can be passed to a function. For example, we might want
to sort the products alphabetically. To achieve this, we could pass the entire
array to PHP's sort() function.
The values stored in an array are called the array elements. Each
array element has an associated index (also called a key) that is
used to access the element.
Arrays in most programming languages have numerical indexes that
typically start from zero or one. PHP supports this type of array.
PHP also supports associative arrays, which will be familiar to Perl
programmers. Associative arrays can have almost anything as the array indices,
but typically use strings.
We will begin by looking at numerically indexed arrays.
Numerically Indexed Arrays
These arrays are supported in most programming languages. In PHP, the indices
start at zero by default, although you can alter this.
Initializing Numerically Indexed Arrays
To create the array shown in Figure 3.1,
use the following line of PHP code:
$products = array( "Tires", "Oil", "Spark Plugs" );
This will create an array called products containing the three
values given"Tires", "Oil", and
"Spark Plugs". Note that, like echo,
array() is actually a language construct rather than a function.
Depending on the contents you need in your array, you might not need to
manually initialize them as in the preceding example.
If you have the data you need in another array, you can simply copy one array
to another using the = operator.
If you want an ascending sequence of numbers stored in an array, you can use
the range() function to automatically create the array for you. The
following line of code will create an array called numbers with elements ranging
from 1 to 10:
$numbers = range(1,10);
If you have the information stored in file on disk, you can load the array
contents directly from the file. We'll look at this later in this chapter
under the heading "Loading Arrays from Files."
If you have the data for your array stored in a database, you can load the
array contents directly from the database. This is covered in Chapter 10,
"Accessing Your MySQL Database from the Web with PHP."
You can also use various functions to extract part of an array or to reorder
an array. We'll look at some of these functions later in this chapter,
under the heading "Other Array Manipulations."
Accessing Array Contents
To access the contents of a variable, use its name. If the variable is an
array, access the contents using the variable name and a key or index. The key
or index indicates which stored values we access. The index is placed in square
brackets after the name.
Type $products, $products, and $products
to use the contents of the products array.
Element zero is the first element in the array. This is the same numbering
scheme as used in C, C++, Java, and a number of other languages, but it might
take some getting used to if you are not familiar with it.
As with other variables, array elements contents are changed by using the
= operator. The following line will replace the first element in the
array "Tires" with "Fuses".
$products = "Fuses";
The following line could be used to add a new
element"Fuse"to the end of the array, giving us a
total of four elements:
$products = "Fuses";
To display the contents, we could type
echo "$products $products $products $products";
Like other PHP variables, arrays do not need to be initialized or created in
advance. They are automatically created the first time you use them.
The following code will create the same $products array:
$products = "Tires";
$products = "Oil";
$products = "Spark Plugs";
If $products does not already exist, the first line will create a
new array with just one element. The subsequent lines add values to the
Using Loops to Access the Array
Because the array is indexed by a sequence of numbers, we can use a
for loop to more easily display the contents:
for ( $i = 0; $i<3; $i++ )
echo "$products[$i] ";
This loop will give similar output to the preceding code, but will require
less typing than manually writing code to work with each element in a large
array. The ability to use a simple loop to access each element is a nice feature
of numerically indexed arrays. Associative arrays are not quite so easy to loop
through, but do allow indexes to be meaningful.
In the products array, we allowed PHP to give each item the default index.
This meant that the first item we added became item 0, the second item 1, and so
on. PHP also supports associative arrays. In an associative array, we can
associate any key or index we want with each value.
Initializing an Associative Array
The following code creates an associative array with product names as keys
and prices as values.
$prices = array( "Tires"=>100, "Oil"=>10, "Spark Plugs"=>4 );
Accessing the Array Elements
Again, we access the contents using the variable name and a key, so we can
access the information we have stored in the prices array as $prices[
"Tires" ], $prices[ "Oil" ], and $prices[
"Spark Plugs" ].
Like numerically indexed arrays, associative arrays can be created and
initialized one element at a time.
The following code will create the same $prices array. Rather than
creating an array with three elements, this version creates an array with only
one element, and then adds two more.
$prices = array( "Tires"=>100 );
$prices["Oil"] = 10;
$prices["Spark Plugs"] = 4;
Here is another slightly different, but equivalent piece of code. In this
version, we do not explicitly create an array at all. The array is created for
us when we add the first element to it.
$prices["Tires"] = 100;
$prices["Oil"] = 10;
$prices["Spark Plugs"] = 4;
Using Loops with each() and list()
Because the indices in this associative array are not numbers, we cannot use
a simple counter in a for loop to work with the array. The following
code lists the contents of our $prices array:
while( $element = each( $prices ) )
echo $element[ "key" ];
echo " - ";
echo $element[ "value" ];
The output of this script fragment is shown in Figure
An each statement can be used to loop through arrays.
In Chapter 1, we looked at while loops and the echo
statement. The preceding code uses the each() function, which we have
not used before. This function returns the current element in an array and makes
the next element the current one. Because we are calling each() within
a while loop, it returns every element in the array in turn and stops
when the end of the array is reached.
In this code, the variable $element is an array. When we call
each(), it gives us an array with four values and the four indexes to
the array locations. The locations key and 0 contain the key
of the current element, and the locations value and 1 contain
the value of the current element. Although it makes no difference which you
choose, we have chosen to use the named locations, rather than the numbered
There is a more elegant and more common way of doing the same thing. The
function list() can be used to split an array into a number of values.
We can separate two of the values that the each() function gives us