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图片上传存储源码并且可以预览
Aug 26 PHP
php使用curl访问https示例分享
Jan 17 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
php异常处理方法实例汇总
Jun 24 PHP
yii用户注册表单验证实例
Dec 26 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
购物车实现的几种方式优缺点对比
May 02 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
PHP实现微信退款功能
Oct 02 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 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
php中取得URL的根域名的代码
2011/03/23 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
PHP中Array相关函数简介
2016/07/03 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
php获取linux命令结果的实例
2017/03/13 PHP
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
python妹子图简单爬虫实例
2015/07/07 Python
python自带的http模块详解
2016/11/06 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
django云端留言板实例详解
2019/07/22 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
文秘个人求职信范文
2014/04/22 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
2015年采购部工作总结
2015/04/23 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python
go语言中fallthrough的用法说明
2021/05/06 Golang