PHP 也支持用冒号的
for
循环的替代语法。
for
(expr1; expr2; expr3): statement; ...;
endfor
;
其它语言具有
foreach
语句来遍历数组或散列表,PHP 也行(见
foreach
)。在
PHP 3 中,可
以结合
list()和 each() 函数用
while
循环来达到同样效果。例子见这些函数的文档。
foreach
PHP 4(不是 PHP 3)包括了
foreach
结构,和 Perl 以及其他语言很像。这只是一种遍历数组
简便方法。
foreach
仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量
时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach
(array_expression_r_r
as
$value
) statement
foreach
(array_expression_r_r
as
$key
=>
$value
) statement
第一种格式遍历给定的
array_expression_r_r 数组。每次循环中,当前单元的值被赋给
$value
并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量
$key
。
注
: 当
foreach
开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在
foreach
循环之前调用 reset()。
注
: 此外注意
foreach
所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有
each() 的构造,原数组指针也没有变,数组单元的值也不受影响。
注
:
foreach
不支持用“@”来禁止错误信息的能力。
你可能注意到了以下的代码功能完全相同:
代码如下
:
<?php
$arr
=
array
("one", "two", "three");
reset (
$arr
);
while
(list(,
$value
) = each (
$arr
)) {
echo
"Value: $value<br>\n";
}
foreach
(
$arr
as
$value
) {
echo
"Value: $value<br>\n";
}
?>
以下代码功能也完全相同:
代码如下
:
<?php
reset (
$arr
);
while
(list(
$key
,
$value
) = each (
$arr
)) {
echo
"Key: $key; Value: $value<br>\n";
}
foreach
(
$arr
as
$key
=>
$value
) {
echo
"Key: $key; Value: $value<br>\n";
}