写点什么

【web 开发基础】PHP 中数组的遍历 (45)

作者:迷彩
  • 2022-11-30
    广东
  • 本文字数:1910 字

    阅读完需:约 6 分钟

前言


在 PHP 中,很少需要自己动手将大量的数据声明在数组中,而是通过调用系统函数获取,比如:mysql_fetch_row()函数时从结果集中取得一行作为枚举数组返回。也有很少部分是在程序中直接访问数组中的每个成员,而大部分数组都需要使用遍历一起处理数组中的每个元素。在其他编程语言中,数组遍历通常都是使用 for 循环语句,通过数组的下标来访问数组中的每个成员元素,但要求数组的下标必须是连续的数字索引。而在 PHP 中,不仅可以指定非连续的数字索引值,而且还存在以字符串为下标的关联数组。所以在 PHP 中很少使用 for 语句来循环遍历数组。PHP4 引入了 foreach 结构,是 PHP 中专门为遍历数组而设计的语句,和 Perl 及其他语言很像,是一种遍历数组的简便方式。使用 foreach 语句遍历数组时与数组下标无关,不管是连续的数字索引还是以字符串为下标的关联数组,都可以使用 foreach 语句遍历。foreach 只能用于数组,字 PHP5 起,还可以遍历对象。当试图将其用于其他数据类型或者一个未初始化的变量时会产生错误。foreach 语句有两种语法格式,第一种很常用,第二种比较次要,但却是第一种非常有用的扩展:

第一种用法语法格式:

foreach($array_expression as $value){	循环体}
复制代码

第二种用法语法格式:

foreach($array_expression as $key => $value){	循环体}
复制代码

数组的遍历


第一种格式变量给定的 array_expression 数组,每次循环中,当前元素的值被赋给变量 $value($value 是自定义的任意变量),并且把数组内部的指针向后移动一步,因此下一次循环中将会得到该数组的下一个元素,直到数组的结尾停止循环,结束数组的遍历。代码如下所示:

<?php$arr = array(1,'张三','五年级1班','11001');$num = 0;//计数foreach($arr as $value){	echo "在数组\$arr中第 $num 元素是: $value \n";	$num++;}?>
复制代码

执行结果如下:


上面的代码中声明了一个一维数组 $arr,并使用运算符号‘=>’将数组 $arr 中的元素重新指定了索引下标,接着使用 foreach 语句循环遍历数组 $arr,第一次循环时,将数组 $arr 中的第一个元素的值赋给变量 $value,并输出变量 $value 的值,并把数组内部指针移动到第二个元素;第二次循环时再将第二个元素的值重新赋值给变量 $value,再次输出变量 $value 的值;以此类推,直到数组结尾停止 foreach 语句循环。


foreach 语句的第二种格式和第一种格式是做同样的事,只是当前元素的键名也会在每次循环中被赋值给变量 $key($key 也是自定义的任意变量)。代码如下:

<?php//关联数组的定义$arr = array(	"ID" => 1,	"姓名" => "张三",	"班级" => "五年级1班",	"学号" => "11001",);echo "学生信息:\n";foreach($arr as $key => $value){	echo "$key : $value \n";}
?>
复制代码

执行结果如下:


上面代码中声明了一个一维的关联数组 $arr,指定了字符串索引下标,并使用 foreach 语句的第二种格式遍历数组 $arr.遍历到每个元素时都把元素的值赋给变量 $value,同时把元素的下标值赋给变量 $key,并在 foreach 语句的循环体中输出键值对。


使用 foreach 语句遍历多维数组是也需要使用嵌套来完成。我们使用三层 foreach 语句嵌套,我们通过对三维数组的遍历,把下图中的数据输出到浏览器表格中:



<?php$employee = array(	"销售部" => array(    	array(1001,"张三",8000),    	array(1002,"李四",5000)  ),  "运营部" => array(    	array(1003,"王五",12000),    	array(1004,"赵六",10000)  ),  "技术部" => array(    	array(1005,"李白",15000),    	array(1006,"鲁班",11000)  ));//print_r($employee['技术部']);//print_r($employee['技术部'][0]);//print_r($employee['技术部'][0][2]);foreach($employee as $key => $value){//遍历出三个部门数据的键和值	echo '<table border="1" width="600" align="center">';	echo '<caption><h2>'.$key.'员工工资表</h2></caption>';	echo '<tr bgcolor="orange"><th>工号</th><th>姓名</th><th>薪资</th></tr>';	foreach($value as $row){//遍历行		echo '<tr>';		foreach($row as $col){//遍历列			echo '<td>' . $col . '</td>';		}		echo '</tr>';	}	echo '</table></br>';}?>
复制代码

执行结果如下:


总结

上面的代码中使用了三层 foreach 语句嵌套遍历三维数组 $employee,最外层 foreach 语句遍历时,将数组 $employee 中元素的下标赋给变量 $key,并将元素的值赋给变量 $value.变量 $value 也是一个数组,又使用一层 foreach 语句遍历数组 $value,并将数组 $value 中的元素赋值给变量 $row。变量 $row 也是一个数组,在使用一层 foreach 语句进行遍历,以表格的形式输出数组 $row 中的每个元素的值。

变量数组的另外一种简便方式就是使用 list(),each()以及 while 语句联合,也是忽略数组元素下标就可以遍历数组的方法。

发布于: 刚刚阅读数: 3
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020-06-18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论

发布
暂无评论
【web 开发基础】PHP中数组的遍历(45)_数据结构_迷彩_InfoQ写作社区