270 likes | 457 Vues
PHP5 與 MySQL4 入門學習指南. 第 13 章 陣列應用. 凱文瑞克 著. 本章大綱. 13-1 定義陣列 13-2 陣列設定 13-3 陣列的操作 13-4 排序與搜尋 問題與討論. 13-1 定義陣列. 所謂的陣列就是指集合相同屬性的變數所成的集合 不同的維度分成了一維陣列 , 二維陣列 ... 依此類推. 變數與陣列. 一維陣列的表示方式. $ 陣列名稱 [ 指標 ] 例 : 陣列的名稱為 $CAR, 指標依序由 0 開始逐一遞增。 這種形式 ( 像一列火車的結構 ) 的陣列我們便稱為一維陣列。.
E N D
PHP5與MySQL4入門學習指南 第 13 章 陣列應用 凱文瑞克 著
本章大綱 13-1 定義陣列 13-2 陣列設定 13-3陣列的操作 13-4 排序與搜尋 問題與討論
13-1 定義陣列 • 所謂的陣列就是指集合相同屬性的變數所成的集合 • 不同的維度分成了一維陣列, 二維陣列 ... 依此類推
一維陣列的表示方式 $陣列名稱[指標] • 例: 陣列的名稱為 $CAR, 指標依序由 0 開始逐一遞增。 這種形式 (像一列火車的結構) 的陣列我們便稱為一維陣列。
在 PHP 中因為變數型態不需要特別宣告, 因此當資料存入變數時, 變數存放的格式為陣列格式, 此時變數即可成為陣列型態。舉例如下: $Name[0] = "Joe" ; $Name[1] = "Ken" ; $Name[2] = "Cherry" ; $Name[3] = "Maggy"; 這時候建立了一個一維陣列
多維陣列 • 陣列中只有一個指標的陣列稱為一維陣列, 如果陣列的指標超過一個以上稱之為多維陣列 • 有兩個指標則稱之為二維陣列, 三個指標稱之為三維陣列其餘依此類推 • 例$陣列名稱[指標1] [指標2] = 值 //二維陣列$陣列名稱[指標1] [指標2] [指標3] = 值 //三維陣列$陣列名稱[指標1] [指標2] [指標3] [指標4] = 值 //四維陣列
三維陣列 • 所謂的三維陣列就是有三個指標的陣列 • 如圖 所示, 將 k 個二維陣列排在一起就變成三維陣列。 二維陣列 三維陣列
13-2 陣列設定 • 設定陣列的初始值的方式有二種 • 直接指定立即值 • 函數設定
直接指定立即值 • 格式如下:$陣列名稱 [ 指標 ] = 值 • 例:$A[0]=10; $A[1]=20; $A[]=30; $A[]=40; • 讀者可以發現在存入 30 及 40 時並沒有指定陣列的指標, 這並不會造成錯誤。因為在 PHP 程式設計中如果程式中未指定指標則存入的數值會依序儲存資料至陣列尾端。
1: <html> 2: <title>一維陣列</title> 3: <body> 4: <?php 5: $A[0] = "Sunday" ; 6: $A[1] = "Monday" ; 7: $A[2] = "Tuesday" ; 8: $A[3] = "Wednesday" ; 9: $A[4] = "Thursday" ; 10: $A[] = "Friday" ; 11: $A[] = "Saturday" ; 12: for ($B=0; $B<=6; $B++) 13: echo "$A[$B] <br>" ; 14: ?> 15: </body> 16: </html> 直接指定立即值範例
函數設定 • 格式如下:陣列名稱 = array(第0元素, 第1元素, 第2元素, ...)陣列名稱 = array(0 =>第0元素, 1 =>第1元素, ...) • 第一種會將元素依序指定給陣列, 並且由指標 0 開始存入。 • 第二種則是指標加上 =>接著元素內容。
1: <html> 2: <title>一維陣列</title> 3: <body> 4: <?php 5: $A = array( 6: 0 => "Sunday", 7: 1 => "Monday", 8: 2 => "Tuesday", 9: 3 => "Wednesday", 10: 4 => "Thursday", 11: 5 => "Friday", 12: 6 => "Saturday" ); 13: for ($B=0; $B<=6; $B++) 14: echo "$B : $A[$B] <br>" ; 15: ?> 16: </body> 17: </html> 將第 6-12 行的指標編號及 => 運算子刪除, 改成 $A = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ); 執行的結果還是相同。
二維陣列的設定 格式如下: $陣列名稱 = array( 0 => array( 0 => 第0列第0行的值 1 => 第0列第1行的值 2 => 第0列第2行的值 ) , 1 => array( 0 => 第1列第0行的值, 1 => 第1列第1行的值, 2 => 第1列第2行的值 ), 以此類推 ... ) ; 在二維陣列設定時, 先設定列, 在每一列中再設定元素的值。
1: <html> 2: <title>多維陣列</title> 3: <body> 4: <?php 5: $A = array( 6: 0 => array( //設定第0列 7: 0 => "00" , 8: 1 => "01" , 9: 2 => "02" 10: ) , 11: 1 => array( //設定第1列 12: 0 => "10", 13: 1 => "11", 14: 2 => "12" 15: ), 16: 2 => array( //設定第2列 17: 0 => "20", 18: 1 => "21", 19: 2 => "22" 20: ) 21: ) ; 22: echo "顯示陣列內容<br>"; 23: for ($B=0; $B<=2; $B++){ 24: for ($c=0; $c<=2; $c++) 25: echo $A[$B][$c].", " ; 26: echo "<br>" ; 27: } 28: ?> 29: </body> 30: </html>
1: <?php 2: $A=array( "Mon" => "星期一", 3: "Tue" => "星期二", 4: "Wed" => "星期三"); 5: foreach ($A as $k => $v) 6: echo "A[ $k ] = $v <br>"; 7: ?> PHP 也接受文字當成指標
13-3陣列的操作 • 存取陣列 • 指標運用
1: <html> 2: <title>統計表</title> 3: <body> 4: <?php 5: $s = array (0,15,10,20,17,3,8,10,15,12) ; 6: echo "銷售員業績統計表<p>" ; 7: $cnt=count($s); 8: for ($A=1 ; $A<$cnt; $A++){ 9: echo "編號 $A 銷售員 : " ; 10: $s[0]+=$s[$A] ; 11: $p=$s[$A]*20; 12: echo "<img src=line.jpg width=$p height=10>"; 13: echo " $s[$A]<br>" ; 14: } 15: echo "<p>總量: $s[0]" ; 16: ?> 17: </body> 18: </html> Count函數 格式: int count() 說明: count()函數會傳回由 [陣列名稱] 所指定的陣列元素的個數。
1: <?php 2: $s=array( array(62,22,35,58,90), 3: array(73,6,94,12,15), 4: array(25,17,75,20,25)); 5: ?> 6: <html> 7: <title>二維陣列</title> 8: <body> 9: <table border=1 width=300 > 10: <?php 11: for ($i=0; $i<=2; $i++){ 12: echo "<tr align=center>"; 13: foreach($s[$i] as $v) 14: echo "<td> $v </td>"; 15: echo "<td bgcolor=#ffffd2>".array_sum($s[$i])."</td>"; 16: } 17: ?> 18: </table> 19: </body> 20: </html> array_sum() 函數格式如下: mixed array_sum ( array 陣列名稱) 說明: 函數將傳回[陣列名稱]所指定的陣列中全部的元素相加之值。 回傳值可能是整數或浮點數。
13-4 排序與搜尋 • 排序:依規則重新排列 • 排序函數有 sort(),arsort(), asort(), ksort(), natsort(), natcasesort(), rsort(), usort(), array_multisort(), 和 uksort() 各式排序函數。 詳細內容請參考附錄會有更多說明。 • 搜尋, 就是設定一個數值, 然後在一群元素中尋找是否有元素與欲搜尋的數值相同。
1: <?php 2: function show_array($a){ 3: foreach ($a as $v) 4: echo "[$v] "; 5: echo "<p>"; 6: } 7: $p=array(1,3,5,2,4,6); 8: $k=array('this', 'is', 'a', 'book','that','pen'); 9: echo "原陣列順序:<br>"; 10: show_array($p); 11: sort($p); 12: echo "sort()排序後順序:<br>"; 13: show_array($p); 14: rsort($p); 15: echo "rsort()排序後順序:<br>"; 16: show_array($p); 17: echo "<hr width=300 align=left>"; 排序範例 1/2 11-13行 14-17行
$k=array('this', 'is', 'a', 'book','that','pen'); 18: echo "原陣列順序:<br>"; 19: show_array($k); 20: array_multisort($k); 21: echo "排序後順序:<br>"; 22: show_array($k); 23: array_multisort($k,SORT_DESC); 24: echo "DESC排序後順序:<br>"; 25: show_array($k); 26: array_multisort($p,$k); 27: echo "同時排序:<br>"; 28: show_array($p); 29: show_array($k); 30: ?> 排序範例 2/2
1: <?php 2: $a=array('this', 'is', 'a', 'book','that','is', 'a','pen'); 3: $pos=array_search('book',$a); 4: echo "$a[$pos]的位置在陣列中第 $pos 位<p>"; 5: $p=array_keys($a,'is'); 6: foreach ($p as $k => $v) 7: echo "第[$k]個 is 出現在陣列第 $v 個位置<br>"; 8: echo "總共有 ".count($p)." 個 is 在陣列中 <br>"; 9: ?> 第 2 行宣告陣列的內容。 第 3 行利用 array_search() 傳回 'book' 在陣列中第一次出現的位置。 第 4 行顯示搜尋結果。 第 5 行利用 array_keys() 函數搜尋整個陣列是否有 'is' 字串, 並且將搜尋到 'is' 在陣列中的位置依序存放在 $p 陣列。 第 6-7 行顯示 $p 的搜尋結果。第 8 行利用 count()函數計算陣列的元素個數。 修改第 7 行
問題與討論 • 請繪圖說明一維陣列, 二維陣列和三維陣列的組成及指標位置。 • 請修改範例 13-6 計算每一個列及每一個行的和。 • 如果每一件零件的安全存量是 500 個。請修改範例 13-7 顯示一個進貨單, 顯示每一個零件需要進貨的數量。 • 承上題, 請寫一網頁可選擇 (radio) 進貨數量的排序結果, 順序由大到小或由小到大。
問題與討論 • 請利用範例 13-5 的數據, 完成下圖之要求。 (提示 <table> )