Lesson 12 - Arrays and loops in PHP
In the previous exercise, Solved tasks for PHP lessons 7-11, we've practiced our knowledge from previous lessons.
In the previous lesson, Solved tasks for PHP lessons 7-11, we went over how to use for
and while
loops in PHP. In today's lesson, we're going to finish up
with loops and show you how to use them properly when working with arrays.
Filling an array using loops
Loops are widely used for automatizing array manipulations. Usually, there
are lots of items in an array and dealing with them one by one would certainly
not be a good idea. Let's start by filling an array with numbers from
1
to 100
.
We know the number of loop iterations, 100, so we will use the
for
loop. Its control variable ($i
) will go from
0
to 99
(an array of 100
items will have
indexes from 0
- 99
). We'll have to increase the value
by 1
because we want values from 1
to
100
:
$numbers = array(); for ($i = 0; $i < 100; $i++) $numbers[$i] = $i + 1;
Printing an array using loops
We now have an array filled with 100 numbers. However, we don't usually
generate arrays like this. In most cases, we retrieve values from databases.
Regardless, the approach shown above will do for now Another common thing to do is print
values from an array into a table.
The for
loop
I'm pretty sure you could have come up with the following code at this point if you were given the task:
{PHP}
$numbers = array();
for ($i = 0; $i < 100; $i++)
$numbers[$i] = $i + 1;
echo('<table border="1"><tr>');
for ($i = 0; $i < 100; $i++)
echo('<td>' . htmlspecialchars($numbers[$i]) . '</td>');
echo('</tr></table>');
{/PHP}
The code prints the contents of the array into a table using the
for
loop. In real applications, there would most likely be other
kinds of content in the array such as comments from a database, which we will
get to soon enough.
The foreach
loop
As a matter of fact, there is a shorter and more sophisticated way to print
arrays, the foreach
loop. Its usage is as follows:
foreach ($collection as $element)
Foreach
iterates over array items and stores the current item in
a variable. This is the difference between foreach
and
for
loops, which store the item's index, not the item itself.
Here's how we would print the array into a table using
foreach
:
{PHP}
$numbers = array();
for ($i = 0; $i < 100; $i++)
$numbers[$i] = $i + 1;
echo('<table border="1"><tr>');
foreach($numbers as $number)
echo('<td>' . htmlspecialchars($number) . '</td>');
echo('</tr></table>');
{/PHP}
The program's output will be identical. Foreach
is mostly used
for reading and working with objects, which we will get to later as well because
it is way more readable than for
loops.
The loop's variable in the example above contains a copy of the element at a
given position. If we tried to modify the variable $number
, it
wouldn't affect the array at all because all we'd be doing is modifying a copy
of the current element and not the element itself. On the other hand, if we
wanted to multiply every single element by 2, using a for
loop be
relatively easier:
for ($i = 0; $i < 100; $i++) $numbers[$i] = $numbers[$i] * 2;
Either way, we don't want to modify the original array, so we'll use
foreach
for these intents and purposes.
PHP array functions
PHP provides a wide range of functions for working with arrays. We won't go into them in detail, we'll just show you a list of the most important ones. Each function references the corresponding page in the official PHP manual where it is described and shown in examples. Every time we program something in PHP, it's a good idea to check whether a function for what we need already exists. Doing so will save us time and prevent us from making mistakes. Internal PHP functions are written in the C language, so they're way faster than anything we could come up with.
You don't absolutely have to examine these functions in detail, just read what they do and look them up later when you need them.
array_fill | Fills an array with values |
array_flip | Exchanges all keys with their values. |
array_intersect_key | Computes array intersections using keys for comparison. |
array_intersect | Computes array intersections. |
array_keys | Returns all of the keys or a subset of the keys in a given array. |
array_map | Applies a callback to the elements of a given array. |
array_merge | Merges one or more arrays. |
array_pop | Pops the element off the end of an array. |
array_push | Pushes one or more elements onto the end of an array. |
array_reverse | Returns an array with its elements ordered backward. |
array_search | Searches the array for a given value and returns the corresponding key if successful. |
array_shift | Shifts an element off the beginning of an array. |
array_sum | Calculates the sum of values in an array. |
array_unique | Removes duplicate values from an array. |
array_unshift | Prepends one or more elements to the beginning of an array. |
array_values | Returns all the values of an array. |
count | Counts all elements in an array or things in an object. |
extract | Establishes a variable for each array key and assigns the corresponding value to it. |
ksort | Sorts an array by keys. |
sort | Sorts an array by values. |
Array of arrays
Have you ever wondered whether we could put an entire array into another? Arrays are an ordinary data type, so we can absolutely insert arrays one into another. We'll work with arrays like these very often:
$paul = array( 'name' => 'Paul Smith', 'age' => '20', ); $thomas = array( 'name' => 'Thomas Doe', 'age' => '50', ); $jane = array( 'name' => 'Jane Doe', 'age' => '35', ); $people = array($paul, $thomas, $jane);
We created 3 arrays and stored them into another at the very end. The first couple of arrays represent people, the outer array keeps them together so we can work with them easily.
The same exact array would be returned by a database request for users. Except the first and last names would probably be separate values. With all that you know, you should be able to print it out without any help. Just to be sure, we'll do it together:
{PHP}
$paul = array(
'name' => 'Paul Smith',
'age' => '20',
);
$thomas = array(
'name' => 'Thomas Doe',
'age' => '50',
);
$jane = array(
'name' => 'Jane Doe',
'age' => '35',
);
$people = array($paul, $thomas, $jane);
echo('<table border="1">');
echo('<tr><th>Name</th><th>Age</th></tr>');
foreach ($people as $person)
{
echo('<tr><td>' . htmlspecialchars($person['name']) . '</td>');
echo('<td>' . htmlspecialchars($person['age']) . '</td></tr>');
}
echo('</table>');
{/PHP}
We often call this type of array multidimensional, mainly when the items
stored are numbers. Such an array can be imagined as a table (or matrix). Here
is an example of a 3
x3
array:
$matrix = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) );
Of course, we'd use loops to generate large arrays like that. Maybe even use
nested for
loops to print them our, like we did with our simple
multiplication table. Let's go over the code for printing the array we set up
above:
{PHP}
$matrix = array(
array(1, 2, 3),
array(4, 5, 6),
array(7, 8, 9)
);
echo('<table border="1">');
for ($j = 0; $j < 3; $j++)
{
echo('<tr>');
for ($i = 0; $i < 3; $i++)
{
echo('<td>' . $matrix[$j][$i] . '</td>');
}
echo('</tr>');
}
echo('</table>');
{/PHP}
The result:
I used a 2D array to program the on-line sudoku solver, so I'm sure you'll find them rather useful. In the next lesson, Solved tasks for PHP lesson 12, we're going to finish up with the crucial, basic aspects of PHP. We'll talk about string functions and learn how to declare our own functions. Today's examples are, as always, available for download below.
In the following exercise, Solved tasks for PHP lesson 12, we're gonna practice our knowledge from previous lessons.
Did you have a problem with anything? Download the sample application below and compare it with your project, you will find the error easily.
Download
By downloading the following file, you agree to the license terms
Downloaded 41x (1.67 kB)
Application includes source codes in language PHP