background image

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";