<?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. 【Android 界面效果30】Android中ImageSwitcher结合Gallery展示SD卡中的资源图片

    本文主要是写关于ImageSwitcher结合Gallery组件如何展示SDCard中的资源图片,相信大家都看过API Demo 中也有关于这个例子的,但API Demo 中的例子是展示工程中Draw ...

  2. ios 代码截屏模糊问题解决办法

    我们常用的截图方法如下所示: //尺寸是按照 UIGraphicsBeginImageContext(CGSizeMake(, )); //currentView 当前的view 创建一个基于位图的图 ...

  3. itunes connect提交app教程

    .打开itunes connect登陆之后,选择Manage Your Apps,再选Add New App: .填写项目相关信息,不知道怎么填的点击问号查看: Bundle ID Suffix需要和 ...

  4. [wordpress] 输出一个过滤器绑定的方法

    参考了WordPress: How do I get all the registered functions for 'the_content' filter, function print_fil ...

  5. springmvc的一个小例子学习(一)

    个人觉得,学框架最好的 方法无外乎两个:一个是实践这个框架,真实的去用它,比如spring框架,先搭一个简单的spring项目,然后一步一步得去丰富它,从中学到spring框架的精髓和知识:另外一个就 ...

  6. EL函数

    EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法. •示例:${prefix:method(params)} •在EL表达式中调用的只能是Java类的静态方法. •这个Java类的静态 ...

  7. VHDL操作运算符的优先级顺序

           

  8. 另类安装系统——PE工具提取

    1. 在当前系统使用安装工具win$man打开,即pe里集成安装工具 2. 选择安装的磁盘或者分区和引导分区 3. 可以默认下一步 4. 不想更改盘符可以默认下一步 5. 最后完成开始安装部署(还需要 ...

  9. WPF DataGrid 操作列 类似 LinkButton

    WPF中没有类似LinkButton,所以只有运用Button及样式来实现LinkButton. DataGrid 操作列 实现 多个类似LinkButton按钮: 具体实现代码如下: <Dat ...

  10. ajax 返回数据 无法得到其属性的解决办法

    当我们用ajax无法 得到其属性.正常情况下是: <script type="text/javascript">        function useAjax(sen ...