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() 。
//使用array()语句结构将联系人列表中所有数据声明为一个二维数组,默认下标是顺序数字索引
$contact1 = array( //定义外层数组
array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子数组1
array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子数组2
array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'), //子数组3
array(4,'书某','D公司','重庆市','(023)13579135','sm@php.com') //子数组4
);
//以HTML表格的形式输出二维数组中的每个元素
echo '<table border="1" width="600" align="center">';
echo '<caption><h1>联系人列表</h1></caption>';
echo '<tr bgcolor="#dddddd">';
echo '<th>编号</th><th>姓名</th><th>公司</th><th>地址</th><th>电话</th><th>EMALL</th>';
echo '</tr>';
//使用双层for语句嵌套二维数组$contact1,以HTML表格的形式输出
//使用外层循环遍历数组$contact1中的行
for($row=0;$row<count($contact1);$row++)
{
echo '<tr>';
//使用内层循环遍历数组$contact1 中 子数组的每个元素,使用count()函数控制循环次数
for($col=0;$col<count($contact1[$row]);$col++)
{
echo '<td>'.$contact1[$row][$col].'</td>';
}
echo '</tr>';
}
echo '</table>'; $contact1 = array( //定义外层数组
array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子数组1
array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子数组2
array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'), //子数组3
array(4,'书某','D公司','重庆市','(023)13579135','sm@php.com') //子数组4
); foreach($contact1 as $key=>$s){ //echo $key;//以每个数组的键值作为表名
foreach($s as $row){ echo $row; } }
PHP 数组遍历 foreach 语法结构的更多相关文章
- JavaScript中的数组遍历forEach()与map()方法以及兼容写法
原理: 高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是 ...
- 数组遍历 forEach 方法
数组的遍历 遍历数组,将数组中的所有元素都取出来. 使用for 循环执行数组的索引(length-1)相同的次数. var arr=["1", "5", &qu ...
- [19/03/12-星期二] 数组_遍历(for-each)&复制&java.util.Arrays类
一.遍历 for-each即增强for循环,是JDK1.5新增加的功能,专门用于读取数组或集合中所有的元素,即对数组进行遍历. //数组遍历 for-each public class Test_03 ...
- 【PHP】foreach语法
foreach 语法结构提供了遍历数组的简单方式.foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息.有两种语法: foreach ($name ...
- php foreach 语法的遍历来源数组如果不是一个有效数组php会出现错误警告 Invalid argument supplied for foreach()
在php中,foreach语法的遍历来源数组如果不是一个有效数组,php会出现错误警告 Invalid argument supplied for foreach() ,但是很多时候这个数组是取自某些 ...
- 遍历(二)javascript的Foreach语法
原文:http://www.cnblogs.com/Fskjb/archive/2011/03/26/1996165.html 首先,虽然叫foreach语法但关键字还是用for哦,这个语法只是对平时 ...
- ES6 数组遍历方法的实战用法总结(forEach,every,some,map,filter,reduce,reduceRight,indexOf,lastIndexOf)
目录 forEach every some map filter reduce && reduceRight indexOf lastIndexOf 前言 ES6原生语法中提供了非常多 ...
- Array.prototype.forEach数组遍历
forEach是Array新方法中最基本的一个,就是遍历,循环.先看以前是怎么遍历数组的 常用遍历 var arr = [1,2,3,4,5]; for(var i = 0; i < arr.l ...
- 5_PHP数组_3_数组处理函数及其应用_5_数组遍历语言结构
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组遍历语言结构 1. foreach ( array as $value ) 程序: <?php $int ...
随机推荐
- java7(1)——反编译深入理解增强的switch(读字节命令实战)
[本文介绍] 本文主要讲java_7 的改进switch的底层实现.反编译一个使用带String的switch的demo并一步步解析反编译出来的字节命令,从编译的角度解读switch的底层实现. [正 ...
- oracle建表设置主键自增
首先创建一张表 create table member( memberId number primary key, memberMail )not null, memberName ) not nul ...
- 检查Linux服务器性能命令详解
如果你的Linux服务器突然负载暴增,如何在最短时间内找出Linux性能问题所在? 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmst ...
- JS通过身份证号获取生日、年龄、性别
<script> function IdCard(UUserCard,num){ if(num==1){ //获取出生日期 birth=UUserCard.substring(6, 10) ...
- POJ - 3308 Paratroopers (最小点权覆盖)
题意:N*M个格点,K个位置会有敌人.每行每列都有一门炮,能打掉这一行(列)上所有的敌人.每门炮都有其使用价值.总花费是所有使用炮的权值的乘积.求最小的总花费. 若每门炮的权值都是1,就是求最小点覆盖 ...
- linux性能分析命令1:top命令
转载:http://www.cnblogs.com/peida/archive/2012/12/24/2831353.html top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的 ...
- [Face++]Face初探——人脸检测
经过了强烈的思想斗争才把自己拖到图书馆做毕设T^T anyway, 因为毕设里面有人脸识别的部分,所以就想找个现成的api先玩玩,于是就找到最近很火的face++:http://www.faceplu ...
- 【c++ primer, 5e】特殊用途语言特性
[默认实参] 1.注意点:函数的默认实参可以在函数的声明中添加,但是后续声明只能添加默认参数而不能改变先前声明的默认参数.(函数的声明通常是定义在头文件上的,多次声明同一个函数是合法的) 2.默认实参 ...
- Nginx 部署HTTPS
Nginx 部署HTTPS 系统:Linux Centos 7.4 x64 软件:Nginx 1.12.2 注:需要阿里云申请本地域名与证书并添加下载到本地. 注:证书文件为 xxxx.pem 与 x ...
- WCF的异步调用
1.服务契约 namespace Contracts { [ServiceContract] public interface ICalculator { [OperationContract] do ...