The basicArray.php program shows how to build arrays, but it doesn't illustrate the power of arrays and loops working together. To see how these features can help you, let's revisit an old friend from the last Chapter 3, "Controlling Your Code with Conditions and Functions." The version of the "This Old Man" program featured in Figure 4.8 looks a lot like it did in Chapter 3, but the code is quite a bit more compact.
The improvements in this version of the program are only apparent when you look under the hood.
<html> <head> <title> Fancy Old Man </title> </head> <body> <h1>This Old Man with Arrays</h1> <pre> <? $place = array( "", "on my thumb", "on my shoe", "on my knee", "on a door"); //print out song for ($verse = 1; $verse <= 4; $verse++){ print <<<HERE This old man, He played $verse He played knick-knack $place[$verse] ...with a knick, knack, paddy-whack give a dog a bone This old man came rolling home HERE; } // end for loop ?> </pre> </body> </html>
This improved version takes advantage of the fact that the only things that really change from verse to verse is the verse number, and the place where the old man plays paddy-whack (whatever that means). You can organize the places into an array, and that would greatly simplify writing out the song lyrics.
I noticed that each place is a string value associated with some number. I used the array() directive to pre-load the $place array with appropriate values. There isn't a place corresponding to zero, so I simply left the zero element blank.
Note that like most places in PHP, carriage returns don't really matter when you're writing the source code. I decided to put each place on a separate line, just because it looked neater that way.
The song itself is incredibly repetitive. Each verse is identical with the others except for the verse number and the corresponding place. For each verse, the value of the $verse variable will be the current verse number. The corresponding place is stored in $place[$verse]. The code to print out the entire song is a large print statement in a for loop.
//print out song for ($verse = 1; $verse <= 4; $verse++){ print <<<HERE This old man, He played $verse He played knick-knack $place[$verse] ...with a knick, knack, paddy-whack give a dog a bone This old man came rolling home HERE; } // end for loop
The Fancy Old Man program illustrates very nicely the trade-off associated with using arrays. Creating a program that uses arrays correctly often takes a little more planning than using control structures alone (as the programs in Chapter 3). However, the extra work up front can really pay off because the program can be much easier to modify and extend.