while()+list()+each() 遍历数组
要想使用 while()+list()+each()
必须要先搞明白list和each函数的作用。
each() 函数的作用:先取得一个数组的‘当前单元’的下标和值(并存放一个数组)
然后将指针移到下一个单元。
例如:
$a = array("bilibili", "youtube", "pornhub", "v2ex");
$arr1 = each($a);
$arr2 = each($a);
$arr3 = each($a);
$arr4 = each($a);
echo "<pre>";
print_r ($arr1);
echo "</pre>";
echo "<pre>";
print_r ($arr2);
echo "</pre>";
echo "<pre>";
print_r ($arr3);
echo "</pre>";
echo "<pre>";
print_r ($arr4);
echo "</pre>";
结果:
Array
(
[1] => bilibili
[value] => bilibili
[0] => 0
[key] => 0
)
Array
(
[1] => youtube
[value] => youtube
[0] => 1
[key] => 1
)
Array
(
[1] => pornhub
[value] => pornhub
[0] => 2
[key] => 2
)
Array
(
[1] => v2ex
[value] => v2ex
[0] => 3
[key] => 3
)
要注意的是each()函数已自 PHP 7.2.0
起废弃。强烈建议不要使用本函数。
list() 的作用:把数组中的值赋给一组变量
例如:
list($a,$b,$c,$d) = array("bilibili", "youtube", "pornhub", "v2ex");
echo "我最喜欢的视频网站是".$a.',我也经常会去看'.
$b.'。<br />程序员网站'.$d.'。<br />'.$c.'只有老司机才会知道。';
结果:
我最喜欢的视频网站是bilibili,我也经常会去看youtube。
程序员网站v2ex。
pornhub只有老司机才会知道。
注意:
像 array() 一样,这不是真正的函数,而是语言结构。 list() 可以在单次操作内就为一组变量赋值。
在 PHP 7.1.0 之前的版本,list() 仅能用于数字索引的数组,并假定数字索引从 0 开始。
PHP 5 里,list() 从最右边的参数开始赋值; PHP 7 里,list() 从最左边的参数开始赋值。
如果你用单纯的变量,不用担心这一点。 但是如果你用了具有索引的数组,通常你期望得到的结果和在 list() 中写的一样是从左到右的,但在 PHP 5 里实际上不是, 它是以相反顺序赋值的。
通常而言,不建议依赖于操作的顺序,在未来可能会再次发生修改。
最后结合使用来遍历数组
栗子:
<?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 => cranberry
注意例子中使用了一个reset()函数因为将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上边的例子中如果我们在循环内部将 $fruit 赋给了另一个变量的话将会导致无限循环。
评论