陣列
陣列是將相同資料型別的多個變數結合在一起,每個陣列元素皆可視為變數使用,陣列佔有連續的記憶體空間,陣列提供索引值(index)存取陣列中個別元素,PHP語言規定陣列的第一個元素其索引值為0,第二個元素其索引值為1,依此類推,一個陣列擁有n個元素,若要存取陣列最後一個元素,需設定索引值為n-1,由此可知,每個索引值對應唯一一個陣列元素,因此我們只要指定陣列與索引值就可存取陣列中指定的元素。
不使用陣列與使用陣列的差異,若程式中要計算全班30位同學的國文科成績的總分,不使用陣列則需宣告30個變數(例如:$score1、$score2、…、$score30)去儲存30個國文科成績,再去加總「$sum=$score1+$score2+…+$score30」獲得國文科全班總分;若使用陣列則可以利用陣列索引值概念與迴圈結構,使用迴圈控制陣列索引值存取與累加每一個元素,達成加總的功能,在成績計算總分、不及格人數、分數人數分佈等統計使用陣列較容易撰寫,尤其在樣本空間放大時更明顯。
使用變數累加500個成績計算總分
sum=$score1+$score2+$score3+$score4+…+$score500;
註:程式中不能寫…,實際上要完成宣告500個變數與500個變數相加的公式。
使用陣列累加500個成績計算總分
for(int i=0;i<500;i++){
$sum=$sum+$score[i];
}
5-1 陣列
陣列是將相同資料型別的多個變數結合在一起,每個陣列元素皆可視為變數使用,陣列佔有連續的記憶體空間,陣列提供索引值(index)存取陣列元素。PHP語言規定陣列的第一個元素其索引值為0,第二個元素其索引值為1,依此類推,一個陣列擁有n個元素,若要存取陣列最後一個元素,需設定索引值為n-1。
5-2 陣列宣告與初始化
陣列初始化(一)
$score = array();
$score[] = 89;
$score[] = 55;
$score[] = 73;
$score[] = 66;
陣列初始化(二)
$score = array(89,55,73,66);
陣列初始化(三)
$score = array();
for($i=0;$i<4;$i++){
$score[] = 90;
}
5-3 一維陣列與迴圈
利用迴圈變數與陣列索引值結合,經由控制陣列索引值可以存取陣列中所有元素,以下為迴圈變數與陣列索引值結合範例。
迴圈變數與陣列索引值結合範例
使用$A[$i]存取陣列中元素,使用迴圈控制$i的變化,當$i等於0,$A[$i]就會存取陣列A的第一個元素;當$i等於1,$A[$i]就會存取陣列A的第二個元素;當$i等於2,$A[$i]就會存取陣列A的第三個元素,依此類推,就可以存取到陣列所有元素,這就是陣列與迴圈結合可以存取到陣列中所有元素的概念。
foreach迴圈
foreach迴圈可以走訪陣列內所有元素一次。
語法:
foreach (可迭代的物件 as 變數){
重複執行的程式
}
foreach迴圈範例
執行結果
1
2
3
4
5
使用字典建立的一維陣列
字典是鍵(key)與值(value)的對應,相當於索引值不是0到n-1的整數值,而是建立字典時所使用的鍵,使用foreach存取該一維陣列,如下。
使用字典建立的一維陣列範例
執行結果
array(4) { ["1號"]=> int(89) ["2號"]=> int(55) ["3號"]=> int(73) ["4號"]=> int(66) }
89相等於89
55相等於55
73相等於73
66相等於66
5-4 陣列範例
成績計算
執行結果
第1位同學成績為89
第2位同學成績為55
第3位同學成績為73
第4位同學成績為66
283
成績計算 - foreach迴圈
執行結果
成績為89
成績為55
成績為73
成績為66
283
費氏數列
5-5二維陣列
二維陣列的宣告與初始化
所謂二維陣列的宣告是用於定義二維陣列的名稱與陣列中元素的個數,而初始化是指定陣列中元素的值。例如:$score[5][40],就是宣告一個整數的二維陣列,名稱為score,其列索引值由0到4,共5列,其行索引值0到39,共40行,將其圖示化表示如下圖,程式中使用$score[1][2]可以存取陣列score的第2列第3行元素。
二維陣列初始化
二維陣列的使用
程式中使用陣列的優點為可以使用陣列索引存取陣列元素,例如:$score[1][2],括弧內1與2分別表示為列索引值為1,行索引值為2,表示為陣列score的第2列第3行元素。也可以將索引值改成以變數i或變數j取代,如:$score[$i][$j],當i等於1且j等於2,則$score[$i][$j]相當於score[1][2],也就是表示陣列score的第2列第3行元素,此時可以使用巢狀迴圈控制變數i與變數j,當變數i與變數j變化時,對應的$score[$i][$j]所對應的元素也會跟著改變。
以下為迴圈與陣列索引存取陣列中元素範例。
行
1
2
3
4
5
6
7
陣列的使用範例
$score = array(array(89,55,73,66),array(34,86,69,94),array(82,76,90,84));
for($i=0;$i<3;$i++){
for($j=0;$j<4;$j++){
echo $score[$i][$j]." ";
}
echo "<br>";
}
說明
第1行:宣告二維陣列名稱為score有5列40行。
第2到7行:使用巢狀迴圈,迴圈變數i控制列,變數j控制行。當$i=0,$j=0,$score[$i][$j]指向二維陣列score的第1列第1行,顯示該元素。
當$i=0,$j=1,$score[$i][$j]指向二維陣列score的第1列第2行,顯示該元素。
當$i=0,$j=2,$score[$i][$j]指向二維陣列score的第1列第3行,顯示該元素。
依此方式,顯示二維陣列內的每一個元素。
完整程式如下
使用字典建立的二維陣列
字典是鍵(key)與值(value)的對應,相當於索引值不是0到n-1的整數值,而是建立字典時所使用的鍵,使用foreach存取該二維陣列,如下。
使用字典建立的一維陣列範例
執行結果
1號=>89 55 73 66
2號=>34 86 69 94
3號=>82 76 90 84