PHP 数组遍历foreach语法结构及实例


Posted in PHP onJune 13, 2016

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 遍历。

一二维数组混合的例子:

<?php
$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 />';
  }
}
?>

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

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 />";
}
?>

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

以上这篇PHP 数组遍历foreach语法结构及实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
PHP5 的对象赋值机制介绍
Aug 02 PHP
php中长文章分页显示实现代码
Sep 29 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
PHP常用的小程序代码段
Nov 14 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 #PHP
PHP is_array() 检测变量是否是数组的实现方法
Jun 13 #PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 #PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 #PHP
PHP 数组基本操作小结(推荐)
Jun 13 #PHP
PHP中header函数的用法及其注意事项详解
Jun 13 #PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 #PHP
You might like
对Session和Cookie的区分与解释
2007/03/16 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
PHP递归的三种常用方式
2019/02/28 PHP
使用JQuery进行跨域请求
2010/01/25 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
JavaScript实现图片轮播特效
2019/10/23 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
Python实现一个优先级队列的方法
2020/07/31 Python
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
2014村务公开实施方案
2014/02/25 职场文书
入党积极分子评语
2014/05/04 职场文书
大学生交通专业求职信
2014/09/01 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
大明湖导游词
2015/02/03 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
上诉状格式
2015/05/23 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL