1. 程式人生 > >PHP 使用list函式each函式遍歷陣列(實現foreach)解析

PHP 使用list函式each函式遍歷陣列(實現foreach)解析

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 />";
}