Building an Associative Array Here is the code from assoc.php, which generates the array of state capitals: $stateCap[“Alaska”] = “Juneau”; $stateCap[“Indiana”] = “Indianapolis”; $stateC
Trang 1g r
s o
l u
g in
e r
Examining the assoc.php Program
Imagine that you want to store a list of capital cities You could certainly store the cities in an array However, if your main interest is in the relationship between a state and its capital, it could be difficult to maintain the relationship using arrays In this particular instance, it would be nice if you could use the name of the state as the array index (the element’s number, or position, within the array) rather than a number
Building an Associative Array
Here is the code from assoc.php, which generates the array of state capitals:
$stateCap[“Alaska”] = “Juneau”;
$stateCap[“Indiana”] = “Indianapolis”;
$stateCap[“Michigan”] = “Lansing”;
The associative array is just like a normal array, except the index values are strings Note that the indices must be inside quotation marks Once you have cre-ated an associative array, it is used much like a normal array
print “Alaska: “;
print $stateCap[“Alaska”];
print “<br><br>”;
FIGURE 5.5
This page uses
associative arrays
to relate countries
and states to their
capital cities.
Trang 2Once again, the array’s index is a quoted string The associative form is terrific
for data like this In essence, it lets you “look up” the capital city if you know the
state name
Building an Associative Array
with the array() Function
If you know the values you want in your array, you can use the array()function to
build an associative array However, building associative arrays requires a slightly
different syntax than the garden variety arrays you encountered in Chapter 4
139
l i
I N D IZZY - ARRAY
If all this associative array talk is making you dizzy, don’t panic It’s just a new
name for something you’re very familiar with Think about the way HTML
attrib-utes work Each tag has a number of attribattrib-utes that you can use in any order.
For example, a standard button might look like this:
<input type = “button”
value = “Save the world.”>
This button has two attributes Each attribute is made up of a name/value pair.
The keywords type and value are names (or indices, or keys, depending on how
you want to think of it) and the terms button and Save the world are the
values associated with those names Cascading style sheets (CSS) use a different
syntax for exactly the same idea The CSS element indicates a series of
modifi-cations to the paragraph tag:
p {background-color:red;
color:yellow;
font-size:14pt}
While the syntax is different, the same pattern applies The critical part of a CSS
definition is a list of name/value pairs.
Associative arrays naturally pop up in one more place As information comes
into your program from an HTML form, it comes in as an associative array The
name of each element becomes an index, and the value of that form element is
translated to the value of the array element Later in this chapter you see how
to take advantage of this.
An associative array is simply a data structure used when the name/value
rela-tionship is the easiest way to work with some kind of data.
Trang 3g r
s o
l u
g in
e r
I build the $worldCaparray using the array()syntax:
$worldCap = array(
“Albania”=>”Tirana”,
“Japan”=>”Tokyo”,
“United States”=>”Washington DC”
);
The array()function requires the data when you are building an ordinary array, but doesn’t require specified indices The function automatically generates each element’s index by grabbing the next available integer In an associative array, you are responsible for providing both the data and the index
The general format for this assignment uses a special kind of assignment opera-tor The =>operator indicates that an element holds some kind of value I gener-ally read it as holds,so you can say Japan holds Tokyo In other words, “Japan” =>
“Tokyo” indicates that PHP should generate an array element with the index
“Japan”and store the value “Tokyo”in that element You can access the value of this array just like any other associative array:
print “Japan: “;
print $worldCap[“Japan”];
print “<br><br>”;
Using foreach with Associative Arrays
The foreach loop is just as useful with associative arrays as it is with vanilla arrays However, it uses a slightly different syntax Take a look at this code from the assoc.phppage:
foreach ($worldCap as $country => $capital){
print “$country: $capital<br>\n”;
} // end foreach
A foreachloop for a regular array uses only one variable because the index can
be easily calculated In an associative array, each element in the array has a unique index and value The associative form of the foreachloop takes this into account by indicating two variables The first variable holds the index The sec-ond variable refers to the value associated with that index Inside the loop, you can refer to the current index and value using whatever variable names you des-ignated in the foreachstructure
Each time through the loop, you are given a name/value pair In this example, the name is stored in the variable $country,because all the indices in this array are
Trang 4names of countries Each time through the loop, $countryhas a different value.
In each iteration, the value of the $capitalvariable contains the array value
cor-responding to the current value of $country
Unlike traditional arrays, you cannot rely on associative arrays to return in any particular order when you use a foreach loop to access array elements If you need elements to show up in a particular order, call them explicitly.
Using Built-In Associative Arrays
Associative arrays are extremely handy because they reflect a kind of
informa-tion storage very frequently used In fact, you’ve been using associative arrays in
disguise ever since chapter 2, “Using Variables and Input.” Whenever your PHP
program receives data from a form, that data is actually stored in a number of
associative arrays for you A variable was automatically created for you by PHP for
each form element
However, you can’t always rely on that particular bit of magic Increasingly,
server administrators are turning off this automatic variable creation for
secu-rity reasons In fact, the default setup for PHP is now to have this behavior (with
the odd name render_globals) turned off
It’s handy to know how PHP gets data from the form as a good example of
asso-ciative arrays It’s also useful because you may need to know how to get form data
without the variables being created explicitly for you
Introducing the formReader.php Program
The formReader.php program is actually one of the first PHP programs I ever
wrote, and it’s one I use frequently It’s very handy, because it can take the input
from any HTML form and report the names and values of each of the form
ele-ments on the page To illustrate, Figure 5.6 shows a typical Web page with a form
When the user clicks the Submit Query button, formReader responds with some
basic diagnostics, as you can see from Figure 5.7
Reading the $_REQUEST Array
The formReader.phpprogram does its work by taking advantage of an associative
array built into PHP Until now, you’ve simply relied on PHP to create a variable
for you based on the input elements of whatever form calls your program This
T R A P
141
l i
Trang 5g r
s o
l u
g in
e r
automatic variable creation is called register_globals While this is an extremely convenient feature, it can be dangerous, so some administrators turn
it off Even when register_globalsis active, it can be useful to know other ways
of accessing the information that comes from the form
FIGURE 5.6
This form, which
has three basic
fields, calls the
formReader.php
program.
FIGURE 5.7
The formReader.php
program
determines each
field and its value.