文档章节

PHP 数组遍历 foreach 语法结构

wenjin312
 wenjin312
发布于 2017/08/23 15:06
字数 754
阅读 11
收藏 0
PHP

PHP 数组遍历 foreach 语法结构

foreach 语法结构用于遍历数组。

foreach()

PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。

语法:

foreach (array as $value)
    statement
// 或者:
foreach (array as $key => $value)
    statement

上述语法中,每次循环将当前单元的值赋给 $value 并且数组内部的指针向前移一步。在第二种语法格式中还将当前单元的键名也会在每次循环中赋给变量 $key。

例子:

<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $age) {
    echo $age,'<br />';
}
?>

运行该例子输出:

18
20
25

使用数组键值

<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $key=>$age) {
    echo $key,': ',$age,'<br />';
}
?>

运行例子输出:

wang: 18
li: 20
zhang: 25

提示

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

foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。对返回的数组单元的修改也不会影响原数组(见下面例子),但 foreach 循环运行到结束,原数组的内部指针将指向数组的结尾。

<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $age) {
    $age = $age+10;
    echo $age,'<br />';
}
// 输出原数组
print_r($arr_age);
?>

运行例子输出:

28
30
35
Array ( [wang] => 18 [li] => 20 [zhang] => 25 )

要在 foreach 中修改原数组元素,可以通过引用来实现,将上面的例子更改为:

<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as &$age) {
    $age = $age+10;
    echo $age,'<br />';
}
// 输出原数组
print_r($arr_age);
?>

运行例子输出:

18
20
25
Array ( [wang] => 28 [li] => 30 [zhang] => 35 )

遍历多维数组

foreach 语法结构只能用于遍历一维数组,要遍历多维数组,一般是将 foreach 嵌套递归使用或者将原数组分割为一维数组再进行 foreach 遍历。

一二维数组混合的例子:

$arr_age = array("wang"=>18, "li"=>20, "zhang"=>array("name"=>"小张", "age"=>25));
foreach ($arr_age as $age) {
    if(is_array($age)){
        foreach ( $age as $detail) {
        echo $detail,'<br />';
        }
    } else {
        echo $age,'<br />';
    }
}
?>

运行该例子输出:

18
20
小张
25

对多维数组的遍历处理就要根据实际的数据结构而采取最合适的处理方式。

延伸预读

PHP 数组是通过哈希表(HashTable)表实现的,因此 foreach 遍历数组时是依据元素添加的先后顺序来进行的。如果想按照索引大小遍历,应该使用 for() 循环遍历。

for() 循环遍历数组

如果是操作连续键值的数组,也可以采用 for() 循环来遍历数组:

<?php
$arr_age = array(18, 20, 25);
$num = count($arr_age);
for($i = 0; $i < $num; $i++){
    echo $arr_age[$i]."<br />";
}
?>

运行例子输出如下:

18
20
25

提示

也可以用 list() 和 each() 结合来遍历数组,但测试发现效率不如 foreach() 。

本文转载自:

共有 人打赏支持
wenjin312
粉丝 1
博文 14
码字总数 1336
作品 0
广州
php数组循环输出实现方法【实例代码有误!!】

以前我们经常会想怎么来实现php数组循环输出来,本文章来介绍了利用php中常用的四种循环语句来实现单数组或多维数组循环输出方法. 在 PHP 中,我们可以使用下列循环语句: while 只要指定的条件...

adbug
2016/04/11
47
0
深入理解PHP之数组(遍历顺序)

经常会有人问我, PHP的数组, 如果用foreach来访问, 遍历的顺序是固定的么? 以什么顺序遍历呢? 比如: <?php $arr['laruence'] = 'huixinchen'; $arr['yahoo'] = 2007; $arr['baidu'] = 2008; ...

botkenni
2016/10/09
20
0
深入理解PHP之数组遍历

本文地址:http://www.laruence.com/2009/08/23/1065.html 经常会有人问我, PHP的数组, 如果用foreach来访问, 遍历的顺序是固定的么? 以什么顺序遍历呢? 比如: $val) { //结果是什么? } 又比如...

晨曦之光
2012/03/09
97
1
模版引擎 smarty 怎样工作的 学习感悟 foreach

我没有仔细看smrty内部到底是怎么写的只是用了之后根据自己的想法,感觉是这样的,写点东西。当然只是针对foreach这一个函数,如果有错误希望您能提出来,因为这会给我莫大的帮助!! 关于 ...

FrankYang
2012/09/02
0
0
PHP foreach/for/while循环的比较

<?phpheader('Content-Type: text/plain; charset=utf-8');$arr = array('Apple','Boy','Car','Dog');foreach($arr as $v) {echo $v.' ';}echo "n";$c = count($arr);for($i=0;$i<$c;$i++) {......

eechen
2015/12/08
644
1

没有更多内容

加载失败,请刷新页面

加载更多

读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
28分钟前
0
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
30分钟前
0
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
59分钟前
2
0
20180921 su与sudo命令、限制root用户通过ssh远程登录

su 命令 用户切换。 su # 切换到root用户su username # 切换到username用户# su 后面加-时,会初始化当前用户的各种环境su - username # 指定用户执行某些命令 su - -c "touch /tm...

野雪球
今天
2
0
Windows 下双 Python 开发环境配置

Windows 下双 Python 开发环境配置作者:老农民(刘启华)QQ: 46715422Email: 46715422@qq.com微信: 46715422 本人曾经在 Windows 下被两个版本环境折腾够呛,现在总结两个 Python...

新疆老农民
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部