PHP循环遍历数组的3种方法list()、each()和while总结


Posted in PHP onNovember 19, 2014

①each()函数

each()函数需要传递一个数组作为参数,返回数组中当前元素的键/值对,并向后移动数组指针到下一个元素的位置。键/值对被返回带有4个元素的关联和索引混合的数组,键名分别为0、1、key和value。其中键名0和key对应的值是一样的,是数组元素的键名,1和value则包含有数组元素的值。如果内部指针越过了数组的末端,则each()返回FALSE。each()函数的使用如下所示:

<?php
$contact = array("ID" => 1,"姓名" => "高某","公司" => "A公司","地址" => "北京市",);
$id = each($contact); //返回数组$contact中第一个元素的键/值对,是带有4个元素的数组
print_r($id); //输出数组$id:Array([1]=>1,[value]=>1,[0]=>ID,[key]=>ID)
 
$name = each($contact); //返回数组$contact中的第二个元素的键/值对,是带有4个元素的数组
print_r($name); //输出Array([1]=>高某,[value]=>高某,[0]=>姓名,[key]=>姓名)
 
$company = each($contact);
print_r($company); //输出Array([1]=>A公司,[value]=>A公司,[0]=>公司,[key]=>公司)
 
$address = each($contact); 
print_r($address); //输出Array([1]=>北京市,[value]=>北京市,[0]=>地址,[key]=>地址)
 
$no = each($contact);
var_dump($no); //输出bool(false)
?>

PHP中的each();能够枚举所有的数组值,而list()就从each()中的第0元素下标开始读取数据,如:

<?php
$url=array('百度=>'www.baidu.com',
         '新浪网'=>'www.sina.com',
         '搜狐'=>'www.sohu.com' 
);
while(list($a,$b)=each($url))
echo "$a=$b <br/>";
?>

说明:each()函数用于返回当前指针位置的数组值,并将指针推进一个位置。返回数组包含四个键,键0和key包含键名,而键1和value包含相应的数据。如果程序在执行each()函数时指针已经位于数组末尾,则返回false.

②list()函数

list() 函数用数组中的元素为一组变量赋值。

注意,与 array() 类似,list() 实际上是一种语言结构,不是函数。

语法
list(var1,var2...)

参数 描述
var1 必需。第一个需要赋值的变量。
var2 可选。可以有多个变量。

提示和注释
注释:该函数只用于数字索引的数组,且假定数字索引从 0 开始。

<?php
$my_array = array("Dog","Cat","Horse");

list($a, $b, $c) = $my_array;
echo "I have several animals, a $a, a $b and a $c.";
?>

从以上例可以看出list()不能直接读出form表单传递的数据,因为表单数据不是数字索引,用的是变量名称索引,如pwd="123",pwd是索引,而123是值,,需要借助each()来建立数字索引才能赋值给list()函数。而array()是标准数组这个就不介绍了。

这不是真正的函数,而是PHP的语言结构。list()用一步操作给一组变量进行赋值,即把数组中的值赋给一些变量。list()仅能用于数字索引的数组并假定数组索引从0开始。语法格式如下所示:

list(mixed varname,mixed…) = array_expression

list()语句和其他函数在使用上有很大的区别,并不是直接接收一个数组作为参数。而是通过“=”运算符以赋值的方式,将数组中的每一个元素的值,对应的赋给list()函数中的每一个参数。list()函数又将它中的每个参数转换为直接可以在脚本中使用的变量。使用方式如下:

<?php
$info = array('coffee','brown','caffeine');
list($drink,$color,$power) = $info;
 
list($drink,,$power) = $info; //变量的值是数组中第一个和第三个值
 
list( , ,$power) = $info; //变量值是数组中第三个元素的值
?>

通过上例了解list()函数的用法之后,将each()函数和list()函数结合起来使用。代码如下所示:

<?php
$contact = array("ID" => 1,"姓名" => "高某","公司" => "A公司","地址" => "北京市",);
 
list($key,$value) = each($contact);
echo "$key => $value"; //输出变量$key和$value,中间使用“=>”分割
?>

③while循环 遍历数组

前面介绍的each()和list()语句的使用,就不难理解如果使用while循环遍历数组了。使用的语法格式如下所示:

while(list($key,$value) = each(array_expression)){
循环体
}

这种联合体的格式遍历给定的array_expression数组。在while()语句每次循环中,each()语句将当前数组元素的键,赋给list()函数的第一个参数变量$key。并将当前数组元素中的值,赋给list()函数中的第二个参数变量$value,并且each()语句执行之后还会把数组内部的指针向后移动一步,因此下次while()语句循环时,将会得到该数组中下一个元素的键/值对。直到数组的结尾each()语句返回FALSE,while()语句停止循环,结束数组的遍历。

<?php
$contact = array(
"ID" => 1,
"姓名" => "高某",
"公司" => "A公司",
"地址" => "北京市",
"电话" => "(010)98765432",
"EMAIL" => "gao@brophp.com",
);
 
//以HTML列表的方式输出数组中每个元素的信息
echo '<dl>一个联系人信息:';
 
while(list($key,$value) = each($contact)){
echo "<dd>$key : $value</dd>";
}
 
echo '</dl>';
?>

也可以是哟on个同样的方式嵌套遍历多维数组。虽然while遍历数组的结果和freach语句相同,但这两种方法是有区别的。在使用while语句遍历数组之后,each()语句已经将传入的数组参数内部指针指向了数组末端。当再次使用while语句遍历同一个数组时,数组指针已经在数组的末端,each()语句直接返回FALSE,while语句不会被执行循环。只有在while语句执行之前调用reset()函数,重新将数组指针指定第一个元素。而foreach语句会自动重置数组的指针位置,当foreach开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在foreach循环前调用reset()函数。

PHP 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
PHP安装攻略:常见问题解答(三)
Oct 09 PHP
一个取得文件扩展名的函数
Oct 09 PHP
php microtime获取浮点的时间戳
Feb 21 PHP
php cc攻击代码与防范方法
Oct 18 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
thinkPHP批量删除的实现方法分析
Nov 09 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
yii插入数据库防并发的简单代码
May 27 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 PHP
PHP分页类集锦
Nov 18 #PHP
php去除数组中重复数据
Nov 18 #PHP
php中获取主机名、协议及IP地址的方法
Nov 18 #PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 #PHP
php单态设计模式(单例模式)实例
Nov 18 #PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 #PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 #PHP
You might like
PHP自动生成月历代码
2006/10/09 PHP
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
python通过函数属性实现全局变量的方法
2015/05/16 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Python中单、双下划线的区别总结
2017/12/01 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
行政办公员自我评价分享
2013/12/14 职场文书
学习党课思想汇报
2013/12/29 职场文书
意向书范本
2014/07/29 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
辞职书格式样本
2015/02/26 职场文书
诚实守信主题班会
2015/08/13 职场文书
python 远程执行命令的详细代码
2022/02/15 Python