PHP03關於each,list,foreach

/*

<簡單的說>

each,list,foreach這三個主要用在取出陣列資料上
each寒式用來回傳陣列內的key和value,常搭配while迴圈與list寒數取出陣列資料
而何謂key和value呢?在這行中
$arraydata = array(‘0’=>’aaa’,’1’=>’bbb’,’2’=>’ccc’);
0,1,2就是key了,而aaa,bbb,ccc就是value
key也可以是字串,如下行
$arraydata = array(‘a’=>’aaa’,’b’=>’bbb’,’c’=>’ccc’);
現在a,b,c變成key了

list主要用來接收陣列傳來的資料,然後在指定到對應的變數名稱上,
而一般在使用時都會搭配each或其他寒式使用
但each和list卻不能單靠自己就把陣列內的資料完整取出,需要輔助其他寒式或迴圈才行

例如 while(list(變數1,變數2)=each(陣列變數)){敘述;}

而foreach可以單靠自己就可以取得陣列中完整的資料,而且foreach是迴圈
換句話說使用foreach和使用list加each和while的結果是差不多的

例如 foreach( 陣列變數 as $key=>$value){敘述;}*/

//<舉例來說>

$arraydata = array(‘0’=>’aaa’,’1’=>’bbb’,’2’=>’ccc’);
//我想把該陣列裡的值(value)列出來,也就是裡面的資料,如aaa,bbb,ccc
//我可以有以下幾種做法

//方法1
list($var1,$var2,$var3)=$arraydata;
echo $var1.”
“;
echo $var2.”
“;
echo $var3.”
“;

/*執行結果
aaa
bbb
ccc
不過這種寫法沒什麼彈性,萬一陣列又新增資料就沒用了,而且鍵值(key),也就是裡面的0,1,2,必須要像這樣是

數字才可以用,如果換成字串就不能用了*/

//方法2
while(list($var1,$var2)=each($arraydata)){
echo “key=”.$var1.” value=”.$var2.”
“;
}

/*執行結果
key=0 value=aaa
key=1 value=bbb
key=2 value=ccc
這種方法就彈性多了,無論我陣列增加多少資料,程式都可以一一列出,但複雜了點*/

//方法3
foreach($arraydata as $var){
echo “value=”.$var.”
“;
}

/*執行結果
value=aaa
value=bbb
value=ccc
這種方法就比較不複雜了,如果想連key都列出來可以這樣寫
*/
foreach($arraydata as $var1=>$var2){
echo “key=”.$var1.” value=”.$var2.”
“;
}

/*執行結果
key=0 value=aaa
key=1 value=bbb
key=2 value=ccc
*/

//<其他補充說明>

/*
寒式名稱:list
寒式原型:void list(mixed varname,mixed…)
詳細說明:list通常搭配each來使用,或是split,explode等,要注意的事,使用list在陣列上時,陣列的key一定

要是數值,否則無法做用
*/
//範例1
$arraydata = “aaa,bbb,ccc”;
list($v1,$v2,$v3) = split(“,”,$arraydata);
echo $v1.”n”;
echo $v2.”n”;
echo $v3.”n”;
/*執行結果
aaa bbb ccc


寒式名稱:each
寒式原型:array each(array array)
詳細說明:從傳入的陣列中抓取key及value出來,並把陣列內部指標往後移,當移到最後面時會回傳false布林值

,如果要在使用第二次時,要使用reset寒式將陣列的內部指標移到最前面才可以使用
*/
//範例1
echo “
“;
$arraydata = array(‘0’=>’aaa’,’1’=>’bbb’,’2’=>’ccc’);
echo “run1
“;
while(list($var1,$var2)=each($arraydata)){
echo “key=”.$var1.” value=”.$var2.”
“;
}
//第二次因為內部指標在後面所以會直接結束
echo “run2
“;
while(list($var1,$var2)=each($arraydata)){
echo “key=”.$var1.” value=”.$var2.”
“;
}
//使用reset
echo “run3
“;
reset($arraydata);
while(list($var1,$var2)=each($arraydata)){
echo “key=”.$var1.” value=”.$var2.”
“;
}
/*執行結果
run1
key=0 value=aaa
key=1 value=bbb
key=2 value=ccc
run2
run3
key=0 value=aaa
key=1 value=bbb
key=2 value=ccc


名稱:foreach 迴圈
說明:這是給陣列使用的迴圈,能同時取出value和key
迴圈原形1:foreach(array_expression as $value) statement
只取出陣列中的value
迴圈原形2:foreach(array_expression as $key => $value) statement
取出陣列中的value和key

範例如上
foreach($arraydata as $var1=>$var2){
echo “key=”.$var1.” value=”.$var2.”
“;
}
執行結果如上
key=0 value=aaa
key=1 value=bbb
key=2 value=ccc
*/
?>