[陣列]
什麼叫陣列(Array)?陣列就是一個集合變數, 陣列就如變數一般, 可用來儲存資料, 一般的變數只能存放一筆資料, 而陣列則可以存放多筆資料, 簡言之, 陣列就一群資料型態相同的變數集合。 陣列是一群變數的集合, 不妨將陣列想像成一間旅館, 旅館內會有很多房間可以讓旅客居住, 相對於我們的程式而言, 這些房間就是變數, 旅客則是我們的資料。 旅館的房間有所謂的房間號碼, 相對於我們的陣列, 這些房間號碼就是所謂的『index(索引、註標)』。 <<初始陣列>> 使用陣列之前必須先進行初始的程序, 與變數宣告相同:$陣列名稱[]=初始值;例如:
$X[] ="com"; $X[] ="gov"; $X[] ="net"; $X[] ="tw"; $X[] ="int";上例中:因為我們沒有特別指定陣列中的元素註標值, 因此陣列X為採用預設的註標索引編號, 可存放之資料最大註標(即陣列的大小-1)為4。 完成陣列的宣告後, 我們就可以存取陣列中每一個位置的資料, 例如:
$Myarray[0] = 999; //將資料存放置陣列位置0中或是:
$Myarray[0] = 999 //將資料存放置陣列位置0中 $Myarray[1] = 888 //將資料存放置陣列位置1中 //出陣列位置0與1的資料相減, 並存至陣列位置2中 $Myarray[2] = $Myarray[0]- $Myarray[1]
『陣列位置』就是所謂的陣列『註標(subscript、index)』, 而陣列中所存放的每項資料稱之為『元素(element)』, 『註標』是我們存取陣列資料的依據, 例如我們有一個大小為5(五個資料項存放空間)的陣列, 則該陣列就有『0、1、2、3、4』5個註標: 陣列於建立之時, 若不同時指定陣列元素的初始值, 此時, 可透過『array()』函數將多項資料存放於變數中, 使變數轉換為陣列(不需要個別指定陣列元素), 同時, 所指定存放的多項資料將成為陣列中的元素值:
$陣列名稱=array(資料1,資料2,資料3…);例如:
$testArray=array("你","我","他");此時, testArray就是一個大小為3的陣列, 其含有3個元素, 而註標編號為0、1、2, 註標編號1的元素存放資料『你』, 註標編號2的元素存放資料『我』, 註標編號2的元素存放資料『他』。
<<陣列的使用>>
不可一次指定陣列內的元素資料值, 例如://逐個元素指定 $Myarray[0] = 999; $Myarray[1] = 999; $Myarray[2] = 999; $Myarray = 999; //錯誤, 不可一次指定陣列內的元素資料值在上例中, 已透過逐個元素指定的方式建立陣列Myarray, 但是又使用『$Myarray = 999;』敘述指定Myarray, 此時原先的陣列Myarray已經消失而變成變數Myarray。 不可一次讀取陣列內的元素資料值, 例如:
$Myarray = Array(3,6,9); echo $MyArray ; //錯誤要讀出陣列元素資料值, 必須逐項讀出:
$Myarray = array("春天","夏天","秋天","冬天"); echo $Myarray [0]; //印出春天 echo $Myarray [1]; //印出夏天 echo $Myarray [2]; //印出秋天 echo $Myarray [3]; //印出冬天還好, 陣列元素只有四個, 如果有40個, 那可得寫40行敘述才能將陣列內的元素資料全部列印出來!可是, 總會遇到元素很多的時候吧!那就可以配合迴圈敘述來做, 例如用for迴圈來列印出全部的陣列資料:
$Myarray = array("春天","夏天","秋天","冬天"); for ($I=0 ; $I<=3 ; $I++) { echo "$Myarray[$I] . "; }存取陣列資料不可超過註標範圍。
//宣告4個元素的陣列, 註標由0至3 $Myarray = array("春天","夏天","秋天","冬天"); echo $Myarray[5]; //錯誤 echo $Myarray[-1]; //錯誤建立陣列後, 可以直接使用count()函數得知陣列的大小(長度), 我們只要將count()函數得知的陣列大小減1就是陣列元素的最大註標。 例如:
$Myarray = array(3,6,9); echo (count($Myarray)); //列印出陣列大小3 echo (count($Myarray)-1); //列印出最大陣列註標2例如:
$Myarray = array("春天","夏天","秋天","冬天"); for ($I=0 ; $I在上例中, 將count()函數放在for迴圈敘述的測試條件中, 雖然敘述簡短, 但卻是不智之舉, 因為迴圈每次執行時都得呼叫一次count()函數, 造成程式執行效率不佳, 所以應把count()函數提出迴圈外利用:"; }
$Myarray = array("春天","夏天","秋天","冬天"); $num=count($Myarray); for ($I=0 ; $I<$num ; $I++) { echo "$Myarray[$I] "; }
<<非連續註標陣列>>
在初始陣列並給定陣列元素值時, 則元素註標會自動的從0開始編號, 每增加一個元素時, 註標編號自動依序遞增, 而成為連續註標陣列。 有時候, 或許需要以跳號的方式來編排註標, 那就可以在初始陣列時給予任何整數的註標指定, 這就是非連續註標陣列:$X[10] ="com"; $X[20] ="gov"; $X[50] ="net"; $X[100] ="tw"; $X[160] ="int";若已經指定了非連續註標陣列, 接著又增加了一個沒有指定註標編號的元素時, 則此元素的註標會被設定為現有陣列元素中最高索引註標編號加1:
$X[252] ="com"; $X[20] ="gov"; $X[100] ="net"; $X[] ="tw"; //元素註標為252+1253當使用標準的for迴圈敘述來輸出陣列內全部的元素時, 必須指定for迴圈的計數變數初值與終止條件, 這對於連續註標陣列是可行的, 但是對非連續註標陣列可就行不通了, 因為非連續註標陣列的元素註標示隨意亂跳的, 因此, 就必須透過『foreach』迴圈敘述來替代for迴圈敘述:
foreach(陣列 as $value) { 敘述區塊; }例如:
<?php $X[252] ="com"; $X[20] ="gov"; $X[100] ="net"; $X[] ="tw"; foreach ($X as $value) { echo "$value <br>"; } ?>上例中的『$value』只是一個暫存變數, 用來臨時裝載陣列中的元素資料值, 迴圈每執行一次, 『$value』暫存變數的內容就存放不同註標編號內的元素資料值。
<<字串註標陣列>>
字串註標陣列其實也是非連續註標陣列, 通常陣列的註標索引都會以整數來作為識別編號, 但PHP中允許我們以字串來作為註標識別索引:<? $Myarray["charles"] = "庭碩"; $Myarray["egge"] = "土吉"; $Myarray["chiey"] = "宇熙"; $Myarray["connie"] = "宜靜"; foreach ($Myarray as $value) { echo "$value <br>"; } ?>如果使用字串註標陣列, 那array()函數還可以使用嗎?當然可以, 但是必須配合『=>(指標、指向)』運算子, 把字串註標跟元素值分別擺放在『=>(指標、指向)』運算子左右兩側:
<?php $Myarray=array("charles" => "庭碩", "egge" => "小魚", "chiey" => "宇熙", "connie" => "宜靜"); foreach ($Myarray as $value) { echo "$value <br>"; } ?>通常是不需要使用到元素的註標值的, 但如果使用字串註標陣列, 想必使用到註標值的機會就比較大了, 標準的foreach迴圈敘述就不夠用了, 這時候可以使用進階的foreach迴圈敘述:
foreach(陣列 as $key => $value) { 敘述區塊; }上式中的『$value』只是一個暫存變數, 用來臨時裝載陣列中的元素資料值, 而『$key』也是一個暫存變數, 用來臨時裝載陣列中的元素註標, 例如:
<?php $Myarray=array("charles" => "庭碩", "egge" => "小魚", "chiey" => "宇熙", "connie" => "宜靜"); foreach ($Myarray as $key => $value) { echo "元素註標: $key ; 元素值: $value <br>"; } ?>
沒有留言:
張貼留言