在之前的範例裡面,大家應該都玩過”變數”了,每個變數都有一個名字,以便程式取用!請想像一下,如果你要處理的資料很龐大,那你是不是要為每個變數都命名呢?比如說全班42人的國文與數學成績,你是不是要把每個科目每個人的成績都命名,所以你就需要42*2個變數名稱!沒錯,事實如此,你必須這樣做,因為這84個值都不相同,你必須為每個變數命名,否則就不能在程式中取用資料。要取84個名字很痛苦,但這樣的變數是有規則的,所以我們可以用一個簡單的方法來大量的為變數命名,這個機制叫做”陣列”!陣列這個名詞跟函數一樣,都不容易直接知道它的意義,但是”陣列”比”函數”在名稱上容易理解一點,他就是排的整整齊齊,一次為一堆整齊有序的變數命名的機制。(我還是覺得這個名字翻譯的很爛,它也只是變數而已嘛!何必翻個讓人感覺像是大法術或戰爭的名字呢?但是我的大腦已經被毒害了,以後我還是會用”陣列變數”這個名詞來代表這個概念。)
陣列內的變數稱為陣列元素,每個元素除了值之外,一樣也可以有個名字,這種名字稱為key(鍵名),這要特別留意一下。
| 表一 陣列範例程式work6.php | |
|---|---|
| 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. | <? //先命名一個內容很奇怪的變數,看起來像是班級、座號、學號、姓名與性別的資料,雖長得奇怪,但還有些規則,仔細觀察一下,它有用逗號","來區隔每個資料欄位。 $var = "117,45,511815,王大德,男"; //用explode,根據逗號把它炸開吧!然後被炸開的每一塊,都會依序變成陣列變數$element的一部份。 $element = explode( "," , $var); //把陣列變數$element的成員一個一個印到銀幕上,再用<br>切斷資料,每1列印1個 echo $element[0] . "<br>"; echo $element[1] . "<br>"; echo $element[2] . "<br>"; echo $element[3] . "<br>"; echo $element[4] . "<br>"; echo $element[5] . "<br>"; echo $element[6] . "<br>"; ?> |
表一用一個函數:explode()來為這個概念舉例,explode就是爆炸,它可以把一串字炸開,所以你必須告訴它要炸誰,以及根據什麼東西來炸開它!要不然電腦會不知道你要把它炸成幾塊。
陣列變數有多個元素時,分別依序用編號顯示,請觀察它是從0開始,還是從1開始編號?
有$element[6]嗎?
既然是依序的,就有規則可循,那是不是可以用for迴圈改寫每列輸出的方式呢?請試著改用for或while來簡化程式。
| 表二 叫出陣列值的方法 | |
|---|---|
| 01. 02. 03. 04. 05. 06. 07. 08. 09. | <?php //陣列變數$foo裡有五個值 $foo = array("bob" , "key1"=>"fred" , "key2"=>"jussi" , "jouni" , "una"); //叫出值的方法有兩種,第一種,直接指定值的"名字"(原文稱名字為key),沒名字的不能叫出來。 echo "(鍵)名為key1的元素,其值為:".$foo[key1].";(鍵)名為key2的元素,其值為:".$foo[key2]."<br>"; //叫出值的方法有兩種,第二種,沒名字的,電腦會依序給個編號。 echo "第一個無預設鍵名的元素,其序號為0,且值為:".$foo[0]; echo ";2nd,序號1,值為:".$foo[1]."3rd,序號2,值為:".$foo[2]; ?> |
| 表三 配合each函數逐一輸出陣列內元素 | |
|---|---|
| 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. | <?php $foo = array("bob" , "fred" , "ele-key"=>"jussi" , "jouni" , "una"); //先用each函數,針對陣列$foo拉出一個值丟進$bar裡,$bar的第一個元素($bar[0])會顯示 //從$foo中拉出的元素的key,$bar的第二個元素($bar[1])會顯示從$foo中拉出的元素的值。 $bar = each($foo); while ( $bar ){ echo "鍵名為".$bar[0]."的元素,其值為".$bar[1]."<br>"; $bar = each($foo); } ?> |
沒有留言:
張貼留言