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

Looping through arrays with foreach

10 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