foreach 循环

代码示例

foreach ($array as $someVar) {
  echo ($someVar . "<br />");
}

或者

foreach ($array as $key => $someVar) {
  echo ($key." holds the value ".$someVar."<br />");
}

解析

foreach 循环是标准 for 循环的一个特殊形式。上面的示例将打印 $array 中的所有值。foreach 结构是一种方便的方式来遍历数组。

简单的 foreach 语句

foreach 循环在处理索引为任意键(例如非数字键)的数组时非常有用:

$array = array(
  "1st" => "My House",
  "2nd" => "My Car",
  "3rd" => "My Lab"
);

如果使用经典的 for 结构,你需要这样写:

// 获取数组所有的键
$arrayKeys = array_keys($array);
// 获取数组的元素数量
$count = count($array);
// 遍历所有的键
for ($i = 0; $i < $count; $i++) {
  // 使用键来获取每个值
  echo $array[($arrayKeys[$i])] . "<br />";
}

基本上,数组的值只能通过其键来访问:为了确保你获得所有的值,你首先需要列出所有的键,然后获取所有对应的值。上面的例子是通过以下步骤访问第一个数组值的:

$firstKey = $arrayKeys[0];       // '1st'
$firstValue = $array[$firstKey]; // 'My House' ($array['1st'])

foreach 结构为你完成了这些基础工作:

foreach ($array as $someVar) {
  echo $someVar . "<br />";
}

可以看到,后面的示例更易读(和编写)。两者都会输出:

My House
My Car
My Lab
foreach 与键值

如果你需要在循环体中使用数组的键,只需像以下语句那样添加变量。$myKey => $value 使得键的值变得可访问:

foreach ($array as $myKey => $value) {
  // 使用 $myKey
}

这在构建 HTML 下拉列表时非常有用。你可以使用 foreach 循环将 $myKey 变量插入到 value="..." 部分,$value 作为实际的文本值。

这种形式模拟了我们为 $array 元素使用自定义键的方式。它不仅会将 $array 的元素赋值给 $someVar,还会将这些元素的键赋值给 $i

PHP 代码示例:

<?php
$array = array("1st" => "My House", "2nd" => "My Car", "3rd" => "My Lab");
foreach ($array as $key => $someVar) {
  echo $key . ": " . $someVar . "<br />\n";
}
?>

PHP 输出:

1st: My House<br />
2nd: My Car<br />
3rd: My Lab<br />

HTML 渲染:

1st: My House
2nd: My Car
3rd: My Lab

注意事项

如果你在 foreach 循环中改变了赋值变量的内容,变化不会反映到数组中。因此,如果你需要修改数组中的元素,必须通过数组的键来进行修改。例如:

$array = array(
  "1st" => "My House",
  "2nd" => "My Car",
  "3rd" => "My Lab"
);

foreach ($array as $i => $someVar) {
  // 正确的方式
  if ($someVar == 'My Lab') {
    $array[$i] = 'My Laboratory';
  }

  // 这不会更新数组
  $someVar = 'Foo';
}

在上面的例子中,只有在通过键修改 $array 元素时,数组才会被更新。

Last modified: Thursday, 9 January 2025, 10:53 PM