本篇為 PHP 系列
PHP 的 Array 很方便也很彈性使用,當我們想要對 PHP Array 做迴圈的時候,比較常用的兩種做法是 for 及 foreach。而在大部分的情況下,foreach 是比較建議使用的方式。
本文會針對 PHP Array 的用法稍作說明,然後解釋 for loop 及 foreach 的用法,如果你已經熟悉 Array 用法可以直接跳到後面。
PHP Array
PHP 中的 Array,也就是陣列,是由成對的 key 和 value 所組成的資料結構。 key 在大部分情況下可以是任意字串或數字。
array(
key => value,
key2 => value2,
key3 => value3,
...
)
例如,key 都是字串:
$grades = array(
"Excellent" => 100,
"Good" => 80,
"Normal" => 60,
"Bad" => 40,
);
print_r($grade);
Array
(
[Excellent] => 100
[Good] => 80
[Normal] => 60
[Bad] => 40
)
或數字跟字串混用的 key:
$gradeStrings = array(
100 => "Excllent",
80 => "Good",
60 => "Normal",
40 => "Bad",
"F" => "Failed"
);
print_r($gradeStrings);
Array
(
[100] => Excllent
[80] => Good
[60] => Normal
[40] => Bad
[F] => Failed
)
如果如果我們沒有明確提供 key, PHP 則會自動產生索引 (index) ,會由 0 開始往後編號:
例如,這邊只有提供三個 value:
$fruits = ['Banana', 'Apple', 'Orange'];
print_r($fruits);
Array
(
[0] => Banana
[1] => Apple
[2] => Orange
)
我們可以利用 []
(square brackets,中/方括號) 來取出特定 key 的 value。
print($grades['Excellent']); // 1000
print($fruits[2]); // Orange
PHP Array 的 key 和 index 兩個用詞經常被混著使用。以 PHP Array 的角度來看,比較精準的用法會是 key,但是概念上來說,遇到 0、1、2... 這種按照順序編碼的情況,有些人會稱呼這類 key 為 index。
for loop
我們經常會需要遍歷 array 中的 value,一個一個拿出來看、或使用。 當 array 的 key 是由 0 開始編號的 index,我們可以使用比較傳統 for loop 來使用,例如:
$fruits = ['Banana', 'Apple', 'Orange'];
for ($i = 0; $i < count($fruits); $i++) {
print("Fruit: {$fruits[$i]} \n");
}
Fruit: Banana
Fruit: Apple
Fruit: Orange
利用 count
來算出 array 中共有幾個元件,這邊是 3 個。$i 在 loop 的過程中逐次 + 1,直到 $i == 3 後離開迴圈。
然而如果 Array 的 key 是字串,或者不是按照順序的數字,用 for loop 就會比較難以處理,這個時候就會需要使用 foreach
。
foreach loop
foreach
是 PHP 中專門用來遍歷 array 的語法,基本的格式如下:
格式 1:
foreach (iterable_expression as $value)
也可以把 $key
拿出來用:
格式 2:
foreach (iterable_expression as $key => $value)
在 foreach
中,我們不用管 array 裡面有幾個元件,PHP 會自動依序處理。
現在來看看範例,使用前面的 $grades
為例子:
foreach ($grades as $grade) {
print("Grade: {$grade} \n");
}
這段程式結果如下:
Grade: 100
Grade: 80
Grade: 60
Grade: 40
可以看到,使用 foreach
時,我們不必使用 []
來拿出 array 中的 value,PHP 會自動幫我們放到我們指定的變數中,例如範例中,我們把目前的值放到 $grade
中,在 loop 的區塊中就可以直接使用這個變數。
如果有需要用到 $key
的話,可以用 foreach
的另一種格式:
foreach ($grades as $gradeText => $grade) {
print("Grade: {$gradeText}({$grade}) \n");
}
這段程式結果如下:
Grade: Excellent(100)
Grade: Good(80)
Grade: Normal(60)
Grade: Bad(40)
這邊我故意不使用 $key
,而使用了另一個變數名稱 $gradeText
,目的是讓大家看到這個變數名稱是可以自定義的,而不一定要叫做 $key
。
在範例輸出中,可以看到 array 的 $key
跟 $value
都被依序提取出來了。
最後,foreach
除了可以處理字串行別 $key
以外,其實用來處理數字 $key
也是可以的。
使用前面的 $fruits
array 為範例。
foreach($fruits as $fruitIndex => $fruit) {
print("Fruit: {$fruitIndex} - {$fruit} \n");
}
輸出:
Fruit: 0 - Banana
Fruit: 1 - Apple
Fruit: 2 - Orange
當然,如果我們用不到 $fruitIndex
,那就不使用 $key ,採用 foreach 格式 1 也是可以的。
結論
foreach
的用法比較簡潔,也不用自己處理 $key
和元件的數量。
雖然使用 for 也有方法可以處理字串類型的 $key
但會讓整體程式碼看起來變複雜,真的要使用的話可以參考 current 和 next 及 key 等內部指標的操作。
因此,大部分情況下,推薦優先使用 foreach
。
參考
本篇為 PHP 系列
PHP Array 初學者可以參考《Array 教學,基本概念與操作》和《Array 教學,10 個必學的 PHP Array 實用作法與方法》