php foreach()

本文详细介绍了 PHP 中的 foreach 循环结构,包括两种语法形式及其使用场景,特别强调了 PHP5 引入的对象遍历功能。此外,文章还提供了多个示例帮助理解如何在实际编程中应用 foreach。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PHP foreach

foreach

PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key

自PHP 5 起,还可能遍历对象

Note:

当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在foreach 循环之前调用 reset()

Note:

除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。

自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。 <?php
$arr 
= array(1234);
foreach (
$arr as &$value) {
    
$value $value 2;
}
// $arr is now array(2, 4, 6, 8)
?> 
此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。 <?php
foreach (array(1234) as &$value) {
    
$value $value 2;
}

?>

Warning

Reference of a $value and the last array element remain even after the foreachloop. It is recommended to destroy it by unset().

Note:

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(12317);

foreach (
$a as $v) {
   echo 
"Current value of $a: $v. ";
}

/* foreach example 2: value (with its manual access notation printed for illustration) */

$a = array(12317);

$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(12345) as $v) {
    echo 
"$v ";
}
?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值