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

举报
迷彩 发表于 2023/07/15 23:29:54 2023/07/15
991 0 0
【摘要】 前言在PHP中,很少需要自己动手将大量的数据声明在数组中,而是通过调用系统函数获取,比如:mysql_fetch_row()函数时从结果集中取得一行作为枚举数组返回。也有很少部分是在程序中直接访问数组中的每个成员,而大部分数组都需要使用遍历一起处理数组中的每个元素。在其他编程语言中,数组遍历通常都是使用for循环语句,通过数组的下标来访问数组中的每个成员元素,但要求数组的下标必须是连续的数字...

前言

在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语句联合,也是忽略数组元素下标就可以遍历数组的方法。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。