PHP使用list函数each函数遍历数组(实现foreach)浅析
直接进入主题吧。
先看看list函数:
list() 函数用于在一次操作中给一组变量赋值,并且无限参数(参数超过索引数组里元素的数量会报错),如下例
$array=array(1,2,3); list($a)=$array;//即将$array数组里的元素”1”赋值给$a一个变量 var_dump($a); list($a,$b)=$array;//即将$array数组里的元素”1”,”2”一一赋值给$a,$b两个变量 var_dump($a,$b); list($a,$b,$c)=$array;//即将$array数组里的元素一一赋值给$a,$b,$c三个变量 var_dump($a,$b,$c); list($a,$b,$c,$d)=$array;//参数超过数组元素,会报错 var_dump($a,$b,$c,$d);
注意:list()函数只能操作或者说用于使用数字索引的数组,且假定数字索引从 0 开始,关联数组并不能赋值,或者是既有数字索引又有关联索引,就会只取数组里面的数字索引元素,以下是例子。
$sweet = array( 'a' => 'apple' , 'b' => 'banana' ); list($x,$y)=$sweet;//错误,不能赋值给$x,与$y,会直接报错,我就不上图了
例子二:
$sweet = array( 'a' => 'apple' , 'b' => 'banana' , 0 => "one", 1 => "two" ); list($x,$y)=$sweet;//正确,会直接使用数组里面符合要求的元素赋值 var_dump($x,$y);
总的来说,list函数会把数组里的数组索引的元素赋值给参数,并索引值由0开始。
接着说说each()函数
返回数组中当前的键/值对并将数组指针向前移动一步
在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。
以下是代码:$sweet = array( 'a' => 'apple' , 'b' => 'banana' , 0 => "one", 1 => "two" ); $result=each($sweet); var_dump($restult);
细心的人就会发现(我就是那个不细心的),键值对被返回为四个单元的数组,键名为0,1,key和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。
如果再执行一次呢?数组指针将指向下一个元素
$sweet = array( 'a' => 'apple' , 'b' => 'banana' , 0 => "one", 1 => "two" ); $result=each($sweet); var_dump($result); $result1=each($sweet); var_dump($result1);
其实就是第n次再用each()函数,会返回数组的第n个元素的键值对(被返回为四个单元的数组),如果内部指针越过了数组的末端,则 each() 返回 FALSE。
这个时候,再加上while,就可以实现foreach函数了
$sweet = array( 'a' => 'apple' , 'b' => 'banana' , 0 => "one", 1 => "two" ); while(list($x,$y)=each($sweet)){ echo "键名:$x => 键值:$y"; echo"<br />"; }