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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
缓存技术详谈―php
Dec 14 PHP
dedecms中显示数字验证码的修改方法
Mar 21 PHP
php debug 安装技巧
Apr 30 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
PHP中的Streams详细介绍
Nov 12 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
关于laravel模板中生成URL的几种模式总结
Oct 18 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
jQuery技巧总结
2011/01/01 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
Vue路由跳转问题记录详解
2017/06/15 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
python下10个简单实例代码
2017/11/15 Python
python+django加载静态网页模板解析
2017/12/12 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
python识别验证码的思路及解决方案
2020/09/13 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
结婚通知短信大全
2015/04/17 职场文书