Ch08 陣列 網頁程式設計
大綱 陣列介紹 一維陣列 二維陣列 foreach 2019/5/5
陣列介紹 陣列和變數一樣是用來存放資料,不同的是陣列雖然只有一個名稱,卻可以用來存放多個資料。陣列所存放的每個資料叫做「元素」(element),每個元素有各自的「值」(value),至於陣列是如何區分它所存放的元素呢?答案是透過「鍵」(key),在預設的情況下,陣列內第一個元素的鍵為 0 。 PHP 規定陣列的「鍵」(key) 必須為整數或字串,例如: $arr[0] = '櫻櫻美代子'; $arr['姓名'] = '櫻櫻美代子'; $arr[1][2] = '牡丹花'; $arr['flower']['red'] = '牡丹花'; 2019/5/5
一維陣列 直接指派 使用array() 函式 存取一維陣列:存取一維陣列最簡單的方式就是透過鍵指定所要存取的元素,以下面的一維陣列為例,若要存取第一、二、三個元素,可以分別寫成 $my_array['Taiwan']、$my_array['USA']、$my_array['Japan'] $my_array[0] = 100; $my_array = array(); $my_array = array('台北', '紐約', '東京'); $my_array = array('Taiwan' => '台北', 'USA' => '紐約', 'Japan' => '東京'); 2019/5/5
範例1:成績表(使用一維陣列) 成績單1:(一維陣列) <?php $sid1_array=array("S101", "S102", "S103","S104","S105"); $math1_array=array(100, 70, 50, 40,60); $chi1_array=array(90, 80,95,80,70); $eng1_array=array(95,85,40,60,90); ?> <table border=1> for($j=0; $j<5; $j++) { echo "<tr>"; echo "<td>" . $sid1_array[$j] . "</td>"; echo "<td>" . $math1_array[$j] . "</td>"; echo "<td>" . $chi1_array[$j] . "</td>"; echo "<td>" . $eng1_array[$j] . "</td>"; echo "</td>"; } </table> 2019/5/5
多維陣列 直接指派: 使用array() 函式 由於這個敘述沒有指派鍵,所以預設的鍵如下: 存取多維陣列最簡單的方式就是透過鍵指定所要存取的元素,以前一節的二維陣列my_array為例,假設要存取鍵為0、1的元素 (即 ‘蘭花’),可以寫成 $my_array0][1] $3dim_array[1][2]['name'] = '小丸子'; $my_array = array(array('玫瑰', '蘭花', '菊花'), array('蘋果', '白鳳', '香蕉', '葡萄')); [0][0] [0][1] [0][2] [1][0] [1][1] [1][2] [1][3] 2019/5/5
範例2:成績表(2維陣列) 成績單2:(二維陣列) <?php $score2_array=array(array("S101", "S102", "S103","S104","S105"), array(100, 70, 50, 40,60), array(90, 80,95,80,70), array(95,85,40,60,90)); ?> <table border=1> for($i=0; $i<5; $i++) { echo "<tr>"; for($j=0; $j<4; $j++) { echo "<td>" . $score2_array[$j][$i] . "</td>"; } echo "</tr>"; </table> 2019/5/5
foreach迴圈 foreach (array_name as $value) { statements; [break;] } foreach (array_name as $key => $value) { statements; [break;] } 2019/5/5
foreach (array_name as $value) 2019/5/5
foreach (array_name as $key => $value) 2019/5/5
範例3:成績表(使用foreach) 成績單3:(二維陣列 for each) <?php $score3_array=array(array("S101", "S102", "S103","S104","S105"),array(100, 70, 50, 40,60),array(90, 80,95,80,70),array(95,85,40,60,90)); ?> <table border=1> foreach($score3_array as $key=>$value1) { echo "<tr>" ; echo "<td>" . $key . "</td>"; //echo "<td>" . $value1 . "</td>"; echo "</tr>"; echo "<tr>"; foreach($score3_array[$key] as $value) { echo "<td>" . $value . "</td>"; } </table> 2019/5/5
範例4: 成績單4:(二維陣列 for each) <?php $score4_array=array(array("S101", "S102", "S103","S104","S105"),array(100, 70, 50, 40,60),array(90, 80,95,80,70),array(95,85,40,60,90)); ?> <table border=1> foreach($score4_array as $key=>$value_array) { echo "<tr>" ; echo "<td>" . $key . "</td>"; //echo "<td>" . $value1 . "</td>"; echo "</tr>"; echo "<tr>"; foreach($value_array as $value) { echo "<td>" . $value . "</td>"; } 2019/5/5
範例5:自訂索引(key) 成績單5:(自訂索引標籤) <?php $score5_array=array("S101" => array("math"=>100, "eng"=>90, "chi"=>95), "S102" => array("math"=>70, "eng"=>80, "chi"=>85), "S103" => array("math"=>50, "eng"=>95, "chi"=>40), "S104" => array("math"=>40, "eng"=>80, "chi"=>60), "S105" => array("math"=>60, "eng"=>70, "chi"=>90)); ?> <table border=1> foreach($score5_array as $key=>$value_array) { echo "<tr>" ; echo "<td>" . $key . "</td>"; foreach($value_array as $value) { echo "<td>" . $value . "</td>"; } echo "</tr>"; </table> 2019/5/5
範例6: 成績單6:(自訂索引標籤,不用foreach) <?php $score6_array=array("S101" => array("math"=>100, "eng"=>90, "chi"=>95), "S102" => array("math"=>70, "eng"=>80, "chi"=>85), "S103" => array("math"=>50, "eng"=>95, "chi"=>40), "S104" => array("math"=>40, "eng"=>80, "chi"=>60), "S105" => array("math"=>60, "eng"=>70, "chi"=>90)); ?> <table border=1> $key_array = array_keys($score6_array); for($i=0; $i<5; $i++) { echo "<tr>" ; echo "<td>" . $key_array[$i] . "</td>"; echo "<td>" . $score6_array[$key_array[$i]]["math"] . "</td>"; echo "<td>" . $score6_array[$key_array[$i]]["eng"] . "</td>"; echo "<td>" . $score6_array[$key_array[$i]]["chi"] . "</td>"; echo "</tr>"; } </table> 2019/5/5
陣列運算子 運算子 語法 + $a + $b == $a == $b === $a === $b != $a != $b <> !== $a !== $b 2019/5/5
陣列相關函式 (1/3) is_array(arg) count(arr)、sizeof(arr) in_array(value, arr) unset(value) current(arr)、pos(arr) next(arr) prev(arr) end(arr) reset(arr) array_walk(arr, func [, arg,…]) each(arr) list(arg1 [, arg2,…]) array_combine(arr1, arr2) array_diff(arr1, arr2,…) array_fill(key, num, value) array_keys(arr [, value]) array_values(arr) array_reverse(arr, [preserve_keys]) 2019/5/5
陣列相關函式 (2/3) array_flip(arr) array_merge(arr1[,arr2,…]) array_pad(arr, size, value) array_search(value, arr) array_slice(arr,offset[, length]) array_splice(arr, offset[, length [, replace]] array_sum(arr) array_unique(arr) array_push(arr, arg1 [, arg2,…]) 2019/5/5
陣列相關函式 (3/3) array_pop(arr) array_unshift(arr, arg1 [, arg2…]) array_shift(arr) range(arg1, arg2 [, arg3]) asort(arr) arsort(arr) ksort(arr) krsort(arr) sort(arr [, flag]) rsort(arr [, flag]) usort(arr, func) uasort(arr, func) uksort(arr, func) shuffle(arr) 2019/5/5