<?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. 认识C中的结构体

    C中结构体是另外一种表示数据形式的方式,结构体中可以表示C中的基本数据形式,如int,double....结构体可以让我们更好的表示数据.下面来看看结构体. 说到结构体首先要了解的是它的申明形式,要申 ...

  2. python--Subprocess模块

    The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, ...

  3. TinyThread源码分析之中断

    转载请注明来源:cuixiaolei的技术博客 https://github.com/xhawk18/TinyThread TinyThread 是基于Cortex-M0的小型的OS. 知识储备: I ...

  4. Java学习笔记——JDK1.7的新特性。

    1,switch中可以使用字串 Java代码: String s = "test"; switch (s) { case "test" : System.out ...

  5. mongdb Java demo

    接触MONGDB,感觉用起来还挺好.今天做了一个小demo. 一.启动mongdb的服务

  6. 条件控制(if ) ( case)

    一:IF应用格式 (1) (2) (3) IF 条件 THEN IF 条件 THEN IF 条件1 THEN --代码块        --代码块    --代码块1 commit; commit; ...

  7. js和jQuery 获取屏幕高度、宽度

    js获取屏幕高度,宽带 网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body ...

  8. log4net日志文件名输出格式化

    日志文件输出格式: 20130626.txt20130627.txt20130628.txt20130629.txt <appender name="rolling" typ ...

  9. 转: 58同城高性能移动Push推送平台架构演进之路

    转: http://geek.csdn.net/news/detail/58738 文/孙玄 本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需 ...

  10. Python(2.7.6) 标准日志模块 - Logging Configuration

    除了使用 logging 模块中的 basicConfig 方法配置日志, Python 的 logging.config 模块中, dictConfig 和 fileConfig 方法分别支持通过字 ...