270 likes | 548 Views
PHP 的陣列. PHP 陣列的基礎. 在 PHP 陣列儲存的元素是一種對應關係的兩個值 鍵值( Keys )和對應值( Values ) 例如:網域名稱對應 IP 位址;學號對應學生姓名 PHP 陣列依鍵值的不同,可以分為 索引陣列 結合陣列. 索引陣列( Indexed Arrays ). PHP 的索引陣列( Indexed Arrays ) 鍵值:從 0 開始依序增加的正整數,稱為「索引」( Index ) 索引陣列是將相同資料型態的變數集合起來,使用一個名稱代表,以索引值存取變數值. 建立索引陣列 ( 方法 1). PHP 陣列並不需要事先宣告
E N D
PHP陣列的基礎 • 在PHP陣列儲存的元素是一種對應關係的兩個值 • 鍵值(Keys)和對應值(Values) • 例如:網域名稱對應IP位址;學號對應學生姓名 • PHP陣列依鍵值的不同,可以分為 • 索引陣列 • 結合陣列
索引陣列(Indexed Arrays) • PHP的索引陣列(Indexed Arrays) • 鍵值:從0開始依序增加的正整數,稱為「索引」(Index) • 索引陣列是將相同資料型態的變數集合起來,使用一個名稱代表,以索引值存取變數值
建立索引陣列(方法1) • PHP陣列並不需要事先宣告 • 使用兩種方式來建立陣列 • 直接指定陣列元素的值,如下所示: • $names[] = "江小魚"; • $names[] = "陳允傑"; • $names[] = "楊過";
建立索引陣列(方法2) • 使用array()語言建構子建立陣列 $grades = array(78, 55, 69, 93); • 使用array()以「,」逗號分隔指定陣列元素值,以此例的陣列共有4個陣列元素,如下圖所示:
存取與走訪陣列元素 • 使用索引值存取陣列元素,索引值從0開始 • $grades[2] = 65; • $total += $grades[$i]; • 走訪整個陣列 • 使用for迴圈逐次增加索引來,就可以顯示陣列中的每一個元素 for ( $i = 0; $i < count($grades); $i++ ) echo "$i=>$grades[$i] "; • count($grades):陣列$grades的個數
foreach迴圈走訪陣列 • 提供foreach迴圈來走訪陣列的每一個元素 foreach ($scores as $element) { echo "$element "; $total += $element; } • 在as關鍵字前 • 走訪的陣列變數 • 在as關鍵字之後 • 取得陣列元素值的變數 • 依序取出陣列元素,指定給變數$element
練習一 • 利用二個一維的索引陣列,分別儲存星期一到星期日的中英文名詞,再利用迴圈印出如下星期的中英對照。
結合陣列 • 「結合陣列」(Associative Arrays) • 陣列元素儲存的是對應的鍵值和值 • 鍵值不可重複;值可重複 • 結合陣列各元素的鍵值可以是字串或正整數 • 可以使用鍵值來存取陣列元素 • 結合陣列儲存的是一種擁有對應關係的成對元素 • 可以使用正整數或字串作為鍵值,從鍵值對應到儲存的元素值
索引陣列 vs. 結合陣列 • 索引陣列 • $cars=array("Saab","Volvo","BMW","Toyota"); • 結合陣列 • $ages=array(“Joey"=>32, “Ross"=>30, "Chandler"=>34); [0] [1] [2] [3] “Saab” “Volvo” “BMW” “Toyota” $cars [“Joey”] [“Ross”] [“Chandler”] 32 30 34 $ages
建立結合陣列(方法1) • 結合陣列也不需事先宣告,同樣有兩種方式來建立結合陣列 • 直接指定陣列變數值 • $arr["color"] = "紅色"; • $arr["name"] = "江小魚"; • $arr["shape"] = "圓形"; • $arr[] = 50; • 方括號的索引是字串的鍵值 • 最後一個沒有指定索引值,PHP自動指定從0開始的正整數(如同索引陣列)
建立結合陣列(方法2) • 使用array()建立陣列 • $arr = array( "color"=>"黑色", "name"=> "陳會安", "shape"=>"三角形", 100, 50 ); • 使用array()指定陣列元素的值,元素是使用「,」逗號分隔 • 各元素在「=>」符號前是鍵值;之後是對應值,最後一個沒有指定鍵值,預設是0
新增和刪除結合陣列元素 • 使用指定敘述指定新元素 • 在新增前請先使用isset()檢查鍵值是否已經重複 if (!isset($arr["type"])) $arr["type"] = "PHP"; • if條件使用isset()檢查"type"鍵值的陣列元素是否存在 • 如果不存在,才使用指定敘述新增元素 • 刪除結合陣列元素是使用unset(), • unset($arr["type"]);
走訪結合陣列元素 • 結合陣列一樣可以使用foreach迴圈走訪陣列元素 • foreach($arr as $key=>$value) echo "$key=>$value "; • foreach迴圈括號在as關鍵字前是走訪陣列 • 之後使用「=>」符號取得各元素的鍵值$key和值$value
練習二 • 將下面的成績單利用結合陣列儲存,以名字做鍵值,再將成績單輸出。
建立二維索引陣列 • 「二維陣列」(Two-dimensional Arrays) • 擁有2個索引的陣列,屬於一種一維陣列的擴充 • 如果將一維陣列想像成一度空間的線;二維陣列就是二度空間的平面。 • PHP陣列的元素可以是其他陣列 • PHP一樣支援二維陣列或多維陣列
建立二維索引陣列 • 在建立二維陣列前,首先建立每一列的一維陣列,接著建立二維陣列,如下所示: $row0 = array(64, 65); $row1 = array(77, 81); $row2 = array(89, 93); $grades = array($row0, $row1, $row2);
存取二維陣列的元素 • 在建立二維陣列後,就可以使用2個索引來存取陣列元素值 • $grades[1][0] = 77; • 取得元素值也是使用2個索引 • $sum += $grades[$j][$i]; • 需要使用二層for迴圈來走訪陣列元素
練習三 • 將成績單儲存在一個二維陣列中,將如下三筆成績的成績表列印出來。
陣列運算子與陣列參數 • 陣列變數支援指定敘述 • 直接將陣列變數指定成其他陣列變數 • $c = $b + $a; • 將陣列運算式指定給陣列變數$c • 「+」符號是PHP陣列運算子,可以執行兩個陣列變數的聯集運算 $a = array(“A”, “B”, “C”, “D”); $b = array(“B”, “C”, “E”); $c = $b + $a; Print_r($c) //列印出所有陣列索引與元素 Array ( [0] => B [1] => C [2] => E [3] =>D )
PHP的陣列運算子 • PHP提供陣列運算子執行聯集和陣列是否相等的比較運算,其說明如下表所示:
索引陣列相關函數 • array_pad(array, int, value) • $B = array("A","B"); • print_r(array_pad($B, 4, 0)); • Array ( [0] => A [1] => B [2] => 0 [3] => 0 ) • $B = array("A","B"); • print_r(array_pad($B, -4, 0)); • Array ( [0] => 0 [1] => 0 [2] => A [3] => B ) • list(var1, var2, …) • $C = array(“A”,"B“, “C”); • list($x, $y, $z) = $C; • $x = “A”, $y = “B”, $z = “C”
陣列排序與搜尋函數 • 索引陣列排序 • sort(array) • $D = array(“F”, “D”, “E”, “G”, “B”); • sort($D) • print_r($D); • Array ( [0] => B [1] => D [2] => E [3] => F [4] => G) • rsort(array) 與sort()相反
陣列排序與搜尋函數 • 結合陣列排序 • asort(array) $ages=array(“Joey"=>32, “Ross"=>30, "Chandler"=>34); asort($ages); print_r($ages); • Array ( [Ross] => 30 [Joey] => 32 [Chandler] => 34 ) • arsort(array) 與asort()相反
陣列排序與搜尋函數 • 陣列共同排序 • array_multisort(arr1, arr2) • $name = array(“Joey", “Ross", "Chandler");$ages=array(32, 30, 34);array_multisort($ages, $name);print_r($name); • Array ( [0] => Ross [1] => Joey [2] =>Chandler)
陣列排序與搜尋函數 • 陣列搜尋函數 • in_array(value, array):檢查value是否在array中,傳回ture或false • $arr = array(“F”, “D”, “E”, “G”, “B”); • in_array(“E”, $arr); ture • array_search(value, array):檢查value是否在array中,傳回鍵值 • $ages=array(“Joey"=>32, “Ross"=>30, "Chandler"=>34); • array_search(30, $ages); Ross
練習四 • 根據三個科目的總分輸出排名次的成績單