foreach 构造的语法如下:
foreach ($array_expression as $value) {
statement
}
foreach ($array_expression as $key => $value) {
statement
}
第一种形式循环遍历 $array_expression 给出的数组。在每个循环中,将当前元素的值分配给 $value 并且内部数组指针前移一个,以便在下一个循环中访问下一个元素。
第二种形式做同样的事情,除了当前元素的键将在每个循环中分配给变量 $key 。
上面的 foreach 语法也类似于下面的 while 构造:
while (list(, $value) = each($array_expression)) {
statement
}
while (list($key, $value) = each($array_expression)) {
statement
}
甚至 for 循环也可用于处理和循环数组的所有元素,语法如下:
$count = sizeof($arr_expression);
for ($i = 0; $i < $count; $i++) {
$value = $arr_express[$i];
statement
}
for ($i = 0, $item = ''; false != ($value = $arr_expression[$i]); $i++) {
statement
}
“foreach”的嵌套循环也可用于访问多维数组。这是一个示例数组以及访问其值数据的方法。例如:
foreach ($array_expression as $arr_value) {
foreach ($array_value as $value) {
statement
}
}
这是访问数组的示例代码:
$contents = array(
"website_1" => array("name" => "StackOverFlow",
"url" => "http://www.stackoverflow.com",
"favorite" => "yes"),
"website_2" => array("name" => "Tip and Trick",
"url" => "http://www.tipandtrick.net",
"favorite" => "yes")
);
要检索数据,程序员可以使用以下语法直接指定导致值的键,这将打印“我的数字生活”。
echo $contents['website_1']['name'];
但是,在处理大型数组或键和值的名称动态更改时,上述语法变得不实用。在这种情况下,“foreach”函数可用于递归访问数组。
foreach ($contests as $key => $list) {
echo "Website No.: " . $key . "\n";
echo "Name: " . $list['name'] . "\n";
echo "URL: " . $list['url'] . "\n";
}
输出将是:
Website No.: website_1
Name: StackOverFlow
URL: http://www.stackoverflow.com/
Website No.: website_2
Name: Tip and Trick
URL: http://www.tipandtrick.net/