陣列就是一群變數的集合,這群變數有相同或類似的性質,比如學生的成績:
大明-98 小花-82 小乖-60 仔仔-31 妮妮-77
假如不使用陣列的話,那麼當我們想要列出所有學生的成績時,必須每個學生指定一個變數來記錄成績,然後再列印出來:
$A=98 $B=82 $C=60 $D=31 $E=77
然後列印成績的指令得一行一行打;
echo $A; echo $B; echo $C; echo $D; echo $E;
當資料筆數有上百或上千筆時,這樣的做法是非常沒效率的,所以我們需要一個可以簡化的做法來紀錄和列印大量資料的方式,陣列就是一個方法;
當我們使用陣列時,必須給定一個變數名來代表資料的名稱,方便自己辦識,比如用”score”來代表學生的成績.
現在我們可以把學生的成績用score來表示,但我們需要辨識每個學生的成績,所以我們得加上”索引”,索引通常是編號,由0開始,有時也可以使用字串來當索引,我們把學生的成績使用陣列來表示如下;
$score[0]=98; $score[1]=82; $score[2]=60; $score[3]=31; $score[4]=77;
現在,我們只需要記住score和索引,就可以取代之前記住五個名字或五個變數的麻煩,在辦識上也變得簡單了,那麼列印資料是不是也變得簡單了?
由於陣列的變數名稱是一樣的,改變的只有索引值,而索引值又是數字,可以透過運算來改變,因此我們可以使用迴圈來簡化列印的工作:
for($i=0,$i<count($score),$i++){ echo $score[$i]." "; }
我們利用count()函數來計算陣列$score裏的元素個數,在echo時,我們在索引值裏帶入$i的數值,$i會在每跑一次迴圈時自動加1,這樣我們就可以得到$score[0]~$score[4]的成績了.
多維陣列的觀列就是一維陣列的延伸,等於是一維陣列裏的每個元素都各自代表了另一個陣列,以學生成績來舉例就是一位學生有多科的成績;
國文,數學,英文,地理,自然 大明-98,22,34,68,99 小花-82,74,56,77,65 小乖-60,60,56,54,53 仔仔-31,45,99,76,89 妮妮-77,21,23,44,12
如果我們想用一維陣列來表示學生多科成績的話,可以把成績當成字串放入一維陣列,但是這樣的話,如果要處理單科成績時會變得很麻煩;
$score[0]="98,22,34,68,99"; $score[1]="82,74,56,77,65"; $score[2]="60,60,56,54,53"; $score[3]="31,45,99,76,89"; $score[4]="77,21,23,44,12";
如果是這樣的紀錄方式,那麼我們要取出某科的成績時就得先把學生的成績全列出來,再以字串處理的方式去抓出某科的資料:
比如:列印每位學生的英文成績
步驟:
1.找出學生0的成績:$score[0] -> 98,22,34,68,99 2.英文是第2個逗號後到第三個逗號的數字 -> 34 3.echo 34 4.找下一位學的生的成績 5..重覆2~4
我們可以用二維陣列來簡化資料的紀錄與後續的處理,我們把國文,數學,英文,地理,自然這5個科目,分別以索引值0~4來代表,這樣我們可以延續先前提到的一維陣列來紀錄學生的每科成績.
$score[0][0]=98 $score[0][1]=22 $score[0][2]=34 $score[0][3]=68 $score[0][4]=99 $score[1][0]=82 $score[1][1]=74 $score[1][2]=56 $score[1][3]=77 $score[1][4]=65 $score[2][0]=60 $score[2][1]=60 $score[2][2]=56 $score[2][3]=54 $score[2][4]=53 $score[3][0]=31 $score[3][1]=45 $score[3][2]=99 $score[3][3]=76 $score[3][4]=89 $score[4][0]=77 $score[4][1]=21 $score[4][2]=23 $score[4][3]=44 $score[4][4]=12
其中,$score第一個索引值代表的是學生,而第二個索引值則是代表科目,如果我們現在要列印每個學生的英文成績,那麼只要指定第二個索引值的內容為2就可以了:
echo $score[0][2]."<br>"; echo $score[1][2]."<br>"; echo $score[2][2]."<br>"; echo $score[3][2]."<br>"; echo $score[4][2]."<br>";
用迴圈來處理會更快
for($i=0 ; $i<count($score) ; $i++){ echo $score[$i][2]." "; }
在這個迴圈中,我們要顯示的是每個學生的某科成績,所以迴圈要跑的次數是學生的數量,而學生的數量是在第一個索引值中,因此我們以count($score)來取得第一個索引的個數,如果我們要列印的是全部科目的成績,那麼可以用count($score[0])來取得科目的數量,在迴圈的內部我們要列印的是英文字,因此只需要第2個索引值固定在2就可以了,而第一個索引值則帶入$i,如此才可以取得每位學生的英文成績.
因此,既然我們已經以二維陣列來紀錄學生的每科成績了,當然就可以用迴圈來顯示每位學生的每科成績了,在這裏要注意的是,因為我們的條件是”每位學生”及”每科成績”,因此”每位學生”是一個迴圈,”每科成績”也是一個迴圈,所以要使用巢狀迴圈來顯示.
for($i=0;$i<count($score);$i++){ echo "student ".$i.":"; for($j=0;$j<count($score[0]);$j++){ echo $score[$i][$j].","; } echo " "; }
要注意的是,在巢狀迴圈中,每一層的計數變數不能相同,所以第一層使用$i,第二層則是使用了$j,每一層迴圈都可以獨立處理一些作業,所以我在第一層迴圈列印了字串”student”然後加上$i這個變數值,這樣會顯示出student 0~student 4這樣的字串在網頁上,而第二層則是要顯示每科成績,這時把$i和$j分別帶入第一個索引值和第二個索引值,然後我們在每次顯示不同科目成績後加入一個逗號”,”,當內圈$j執行完畢時,會回到$i這一層,此時我們加上了一個斷行標籤<br>,那麼在網頁上時示時就會在每位學生的每科成績顯示完後,換到下一行,然後顯示下一位學生的每科成績.
網頁上呈現的結果:
student 0:98,22,34,68,99, student 1:82,74,56,77,65, student 2:60,60,56,54,53, student 3:31,45,99,76,89, student 4:77,21,23,44,12,
以上,就是陣列的觀念及迴圈的應用,建立了對陣列的認識和了解後,後續我們可以進一步的去了解陣列的宣告及建立的方式
留言