php中each()与list()函数
<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
echo "$key => $val\n";
}
?>
以上例程会输出:
这是从官方网站查询到的,很费解while里面的条件判断语句,查询了不少资料也没看出个所以然,不得不自己动手看一下:
1.list()语言结构是从参数的最右边开始赋值的,举下面两个的小例子证明:
<?php
list($b, $c, $a[$b][$c]) = array('a', 'b', 'c');
print_r($a);
?>
Notice: Undefined variable: c in F:\www\my\test2.php on line 9
Array ( [] => Array ( [] => c ) )
<?php
list($a[$b][$c], $b, $c) = array('a', 'b', 'c');
print_r($a);
?>
运行后出现的结果是:
Array ( [b] => Array ( [c] => a ) )2.list() 仅能用于数字索引的数组并假定数字索引从 0 开始。
a
<?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 nihao4.上面官网例子根据李炎恢老师的讲解,应该完善一下,代码如下:
<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (!!list($key, $val) = each($fruit)) {
echo "$key => $val\n";
}
?>
while语句里面应该是条件判断语句,转换成布尔值后比较合理。