PHP的foreach循环
作者:会飞的
PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组(自PHP 5 起还可能遍历对象),当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
注: 当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。
注: 除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此数组指针不会被 each() 结构改变,对返回的数组单元的修改也不会影响原数组。不过原数组的内部指针的确在处理数组的过程中向前移动了。假定 foreach 循环运行到结束,原数组的内部指针将指向数组的结尾。
[编辑]
循环中同时修改数组元素
自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
?>
此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。
注: foreach 不支持用“@”来抑制错误信息的能力。
用户可能注意到了以下的代码功能完全相同:
<?php
$arr = array("one", "two", "three");
reset($arr);
while (list(, $value) = each($arr)) {
echo "Value: $value<br>
";
}
foreach ($arr as $value) {
echo "Value: $value<br />
";
}
?>
以下代码功能也完全相同:
<?php
$arr = array("one", "two", "three");
reset($arr);
while (list($key, $value) = each($arr)) {
echo "Key: $key; Value: $value<br />
";
}
foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value<br />
";
}
?>
示范用法的更多例子:
<?php
/* foreach example 1: value only */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Current value of $a: $v.
";
}
/* foreach example 2: value (with key printed for illustration) */
$a = array(1, 2, 3, 17);
$i = 0; /* for illustrative purposes only */
foreach ($a as $v) {
echo "$a[$i] => $v.
";
$i++;
}
/* foreach example 3: key and value */
$a = array(
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => 17
);
foreach ($a as $k => $v) {
echo "$a[$k] => $v.
";
}
/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2
";
}
}
/* foreach example 5: dynamic arrays */
foreach (array(1, 2, 3, 4, 5) as $v) {
echo "$v
";
}
?>
猜你喜欢
您可能感兴趣的文章:
- 一个网站优化项目需要做哪些工作
- 站点地图与网站优化 网站地图的四个好处
- 做好整站优化才是真正的网站优化
- 做搜索引擎优化其实不单单考虑搜索引擎的算法
- ISSET()、empty()、is_numeric()的使用方法
- 排序算法
- 40个技巧优化您的PHP代码
- Access to the requested object is only available from the local network.
- ISSET()、empty()、is_numeric()使用方法
- ob_get_contents() 函数的用法
- PHP OOP思想
- PHP XML Expat 解析器
- php 读取xml
- PHP 二分法查找数据
- PHP 发送邮件
- PHPer程序员评“一个PHP程序员的价值”
- php程序员容易犯的10种错误
- php代码中去除空格和其他特殊符号
- PHP导出一个txt文本文件