Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Looping through arrays with foreach

5 views
Skip to first unread message

Sjoerd

unread,
Mar 31, 2006, 5:29:42 AM3/31/06
to
Summary: Use foreach(..) instead of while(list(..)=each(..)).

--=[ How to use foreach ]=--

Foreach is a language construct, meant for looping through arrays.
There are two syntaxes; the second is a minor but useful extension
of the first:

foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement

For example:
<?php
$arr = array("one", "two", "three");
foreach ($arr as $value) {
echo "Value: $value\n";
}
?>

This will output:
Value: one
Value: two
Value: three


--=[ Why not to use list & each ]=--

Another method to loop through an array is the following:
<?php
while (list(, $value) = each($arr)) {
echo "Value: $value<br />\n";
}
?>

This has some disadvantages:
- It is less clear, because list() looks like a function but
actually works the other way around: instead of returning
something, it takes a parameter by being the left-hand side
of the expression and assigns values to the parameters.
- You have to reset() the array if you want to loop through it
again.
- It is approx. three times slower than foreach.


--=[ About for & count ]=--

Another method to loop through an array:
for ($i = 0; $i < count($arr); $i++) {
echo "value: $arr[$i]\n";
}

Consider this array:
array(5 => "Five");

The above for-loop would loop from elements 0 through 5, while
only one element exists. If this is what you want, the for-loop
is an effective way to loop through an array. If not, use
foreach instead.

Oli Filth

unread,
Mar 31, 2006, 5:40:34 AM3/31/06
to
Sjoerd said the following on 31/03/2006 11:29:

> Another method to loop through an array:
> for ($i = 0; $i < count($arr); $i++) {
> echo "value: $arr[$i]\n";
> }
>
> Consider this array:
> array(5 => "Five");
>
> The above for-loop would loop from elements 0 through 5, while
> only one element exists.

Actually, no it wouldn't. count($arr) == 1, so it attempts to access
only $arr[0], which clearly doesn't exist.


--
Oli

Chung Leong

unread,
Mar 31, 2006, 8:44:45 AM3/31/06
to
Sjoerd wrote:
> Another method to loop through an array is the following:
> <?php
> while (list(, $value) = each($arr)) {
> echo "Value: $value<br />\n";
> }
> ?>

The main problem with the list() = each() construct is that it has a
side-effect--namely that of advancing the array's internal pointer.
Forgetting to call reset() on an array was a common mistake in PHP 3.

Richard Levasseur

unread,
Mar 31, 2006, 11:22:38 AM3/31/06
to
It should be said that foreach operates on a copy of the array.
Changes to $value won't will not affect the original array.

With PHP5, the referential foreach was added, which aliases $value to
the original value in the array.
foreach($array as $key => & $value) { ... }
It should also be noted that $value will still exist as a reference
after the foreach() is over, thus assignments to $value will affect the
array also, so you much unset() it to prevent undesired side effects.

More information is available in the manual at:
http://us2.php.net/manual/en/control-structures.foreach.php

cherny...@hotmail-dot-com.no-spam.invalid

unread,
Mar 31, 2006, 3:39:46 PM3/31/06
to
Sjoerd wrote:
> Another method to loop through an array is the following:
> ?php
> while (list(, $value) = each($arr)) {
> echo "Value: $value<br />\n";
> }
> ?
>
0 new messages