<?php

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
    echo "$key => $val\n";
}
?>

以上例程会输出:

a => apple b => banana c => cranberr

这是从官方网站查询到的,很费解while里面的条件判断语句,查询了不少资料也没看出个所以然,不得不自己动手看一下:

1.list()语言结构是从参数的最右边开始赋值的,举下面两个的小例子证明:

<?php

list($b, $c, $a[$b][$c]) = array('a', 'b', 'c');

print_r($a);
?>

运行后出现的结果是:

Notice: Undefined variable: b in F:\www\my\test2.php on line 9

Notice: Undefined variable: c in F:\www\my\test2.php on line 9
Array
(
[] => Array
(
[] => c
)

)

//显示变量$b与$c未定义;

<?php
list($a[$b][$c], $b, $c) = array('a', 'b', 'c');

print_r($a);
?>

运行后出现的结果是:

Array
(
[b] => Array
(
[c] => a
) )

2.list() 仅能用于数字索引的数组并假定数字索引从 0 开始。

<?php
$arr = array('a');
list($b,$c)=each($arr);
echo $b.'<br/>'.$c;
?>
运行后出现的结果是:
0
a  
原因如下:
1)list()是先找索引为0的元素,找不到后则为空,后面的继续:
如下所示:

<?php
$aee = array(1=>'a','c'=>'kk',3=>'b',2=>'d');
list($a,$b,$c)=$aee;
echo "a:$a b:$b c:$c\n".'<br/>';

?>

运行后出现的结果是:
Notice: Undefined offset: 0 in F:\www\my\test2.php on line 9
a: b:a c:d  2)如果有两个相同的索引不同的值,则会以后面索引的值为准,如下所示:

<?php
$aee = array(1=>'a','bb'=>'dd',2=>'kk',0=>'b',1=>'d');
list($a,$b,$c)=$aee;
echo "a:$a b:$b c:$c\n".'<br/>';

?>

运行后出现的结果是:

a:b b:d c:kk

表明$b的值是d而不是a。

3)由以上几个例子可以看出,list()不仅用于数字索引的数组并假定数字索引从 0 开始的,而且也可以用于有数字索引的数组,前提条件是数字索引是从0开始的连续数字;

它会自动选择数字索引过滤非数字索引,上面官网的例子中的判断条件也就清楚了。

3.上面官网例子中reset($fruit);在while()语句上面作用并不大,应该放到它下面才会释放由于each()而导致的数组指针的指向而指向第一个单元,如下面的例:

<?php

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');

while (list($key, $val) = each($fruit)) {
echo "$key => $val\n";
}
reset($fruit);
list($a,$b) = each($fruit);
echo $a.'nihao';
?>

运行后出现的结果是:

a => apple
b => banana
c => cranberry
anihao

<?php

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
echo "$key => $val\n";
}

list($a,$b) = each($fruit);
echo $a.'nihao';
?>

运行后出现的结果是:

a => apple
b => banana
c => cranberry
nihao

4.上面官网例子根据李炎恢老师的讲解,应该完善一下,代码如下:

<?php

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (!!list($key, $val) = each($fruit)) {
    echo "$key => $val\n";
}
?>
while语句里面应该是条件判断语句,转换成布尔值后比较合理。
 
 
 

php中each()与list()函数的更多相关文章

  1. SQL中Round(),Floor(),Ceiling()函数的浅析

    项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...

  2. avascript中的this与函数讲解

    徐某某 一个半路出家的野生程序员 javascript中的this与函数讲解 前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大 ...

  3. PHP中有关正则表达式的函数集锦

    之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有 ...

  4. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    用户定义函数(UDF)分类  SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ...

  5. mysql中bit_count和bit_or函数的含义

    翻阅mysql手册时,看到有个示例使用了bit_or方法来去除重复的数据,一开始没看明白,后来看明白之后感觉非常巧妙.示例要实现的功能就是计算每月有几天有访问,先把示例摘录在这里. 1 2 3 4 5 ...

  6. C#中的日期处理函数

    C#中的日期处理函数 //2013年4月24日 this.TextBox6.Text = System.DateTime.Now.ToString("D"); //2013-4-2 ...

  7. 在Excel中使用频率最高的函数的功能和使用方法

    在Excel中使用频率最高的函数的功能和使用方法,按字母排序: 1.ABS函数 函数名称:ABS 主要功能:求出相应数字的绝对值. 使用格式:ABS(number) 参数说明:number代表需要求绝 ...

  8. Loadrunner中web_find和web_reg_find函数的使用与区别

    总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find():这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:一.web_find( ...

  9. python 中的sort 和java中的Collections.sort()函数的使用

    x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...

  10. Unity3D中自带事件函数的执行顺序(转)

    原文:http://www.jianshu.com/p/1d93ece664e2 在Unity3D脚本中,有几个Unity3D自带的事件函数按照预定的顺序执行作为脚本执行.其执行顺序如下: 编辑器(E ...

随机推荐

  1. js字符串的各种格式的转换 ToString,Format

    1.转换钱的格式,仅限int型,float型,double型 double d = 400; d.ToString("C"); //¥400.00 2.10进制数,仅限int型的数 ...

  2. C语言第八节函数

    什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为"函数".所以,你可以说C语言程序是由函数构成的. 比如你用 ...

  3. NSOperation使用系统提供子类的方法--处理复杂任务

    //创建一个队列 NSOperationQueue *operation=[[NSOperationQueue alloc]init]; //把任务放在NSBlockOperation里面 NSBlo ...

  4. label

    label的使用 以前只知道使用并没太注意一些细节 话说<label><input type="checkbox"/>5星</label>就可以 ...

  5. Spring Data:企业级Java的现代数据访问技术(影印版)

    <Spring Data:企业级Java的现代数据访问技术(影印版)>基本信息原书名:Spring Data:Modern Data Access for Enterprise Java作 ...

  6. 20145102 《Java程序设计》第1周学习总结

    20145102 <Java程序设计>第1周学习总结 教材学习内容总结 linux下对于java的安装是非常简便的,只要参照ArchWiki就可以快速安装,没有Windows上那么复杂.I ...

  7. Linux后台运行

    关于linux后台 ctrl + z jobs -l fg %jobnumber 后台调前台 bg %jobnumber 后台暂停--后台运行 kill pid ps -aux | grep &quo ...

  8. 51nod B君的圆锥(数学)

    题目链接: B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB  B君要用一个表面积为S的圆锥将白山云包起来.   B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少.   注意 ...

  9. JavaScript之返回顶部

    为了弄这个Hexo,今天又是坐在电脑面前待了一天( ⊙ o ⊙ ),老是出问题,在百度上也试验了很多方法,还是没弄好,诶...身心疲惫甚是乏累啊~~~ 算了,这个Hexo先不弄,还是安分点吧,在Hex ...

  10. 我的一点关于把WndProc指向类的成员函数的看法

    转载请注明来源:http://www.cnblogs.com/xuesongshu/ 我以前经常考虑使用WNDCLASS.CreateThread之类的Windows API时如何在类里面调用,传入函 ...