2017年10月11日 星期三

陣列(Array)

陣列(Array)

對於各項事務或資料的分類與管理,都是非常重要的一件事情,
PHP也提供了非常好用的函式,讓我們達到這樣的目的,即陣列(array)
舉例
像是要記錄一個學生(bobo)的基本資料及各項成績欄位,如姓名、學號、國文成績、英文、數學等,就可以設定一個陣列變數「$bobo」就可以了,不必設定五個變數


PHP陣列和其他的程式語言(C語言),最大的不同是,
PHP裡同一個陣列的元素(element),可以是各種不同型態的值
舉例
以學生bobo的基本資料及成績為例
$bobo[0]="王大為";
$bobo[1]="9801005";
$bobo[2]=72;
$bobo[3]=68;
$bobo[4]=90;
陣列變數$bobo的第一、二個元素(索引為01)所儲存的是姓名及學號,資料型態為字串
而第三、四、五個元素(索引為234)儲存的是國文、英文及數學成績,資料型態為整數


宣告與初始化陣列
如同PHP其他的變數一樣,PHP陣列在使用前,也是不需要宣告的。其宣告動作將在初始化、並指定其值的時候自動完成
而一般陣列初始化的方法,大致有以下數種:
1.  一次將所有陣列初始化完畢
2.  動態增加陣列
事實上,不論是否一次將陣列初始化完畢,都可以隨時視需要動態增加陣列


陣列的初始化
1.  透過索引的方式初始化陣列 (直接指定索引值的方式)
2.  利用array()函式,直接初始化陣列
初始化陣列的方式不只這兩種

透過索引的方式宣告
舉例
$grade[0]=90;
$grade[1]=100;
echo $grade[0];   echo("
");
echo($grade[1]);  echo("
");
通常也會讓索引搭配for()迴圈,將陣列裡的元素一一取出

利用array()函式方式宣告
舉例
$member = array("大河馬","21","北市花園");
echo($member[0]);  echo("
");
echo($member[2]);  echo("
");
顯示結果
大河馬
北市花園

也可以參考這樣寫
$number=array("1","2","3","4","5",
              "6","7","8","9","0",
              "a","b","c","d","e",
              "f","g","h","i","j",
              "k","l","m","n","o");
echo($number[10]);  echo("
");
echo($number[20]);  echo("
");
顯示結果
a
k

動態增加陣列
如果忘記輸入「索引值」,程式會自動補上,這樣就可達到動態增加陣列的效果
範例
$price[0]=220;
$price[1]=399;
$price[]=100;
$price[]=179;
其結果如下
$price[0]=220;
$price[1]=399;
$price[2]=100;
$price[3]=179;


把字串當作索引的陣列
一般如果以數字當作索引,如下:
$dic[0]="一種遠古流傳的生物";
$dic[1]="一種人不能沒有的東西";
類似這樣的資料,很難去分辨其相對的解釋與意義,如果用「文字」當作索引
$dic["dragon"]="一種遠古流傳的生物";
$dic["money"]="一種人不能沒有的東西";
當中索引值(index)由於採用「文字」,所以必須利用「""」來標記
範例:
$input="dragon";

$dic["dragon"]="一種遠古流傳的生物";
$dic["money"]="一種人不能沒有的東西";
$dic["gun"]="一種人具有強大殺傷力的致命武器";
$dic["car"]="一種可以搭載及具有運輸能力的機械裝置";

echo("使用者輸入的查詢=".$input."");
echo("查詢結果=".$dic[$input]);


二維陣列的初始化
「一維陣列」的排列儲存方式,有如「長條形」般,依據陣列裡的「索引」不斷向右延伸
「二維陣列」的排列儲存方式,有如「平面座標」一般,即行、列軸
例如:
$jacky=array(
             "tom"=>array("mary","kitty"),
             "bob"=>array("john","carol")
            );
陣列值內容為
$jacky["tom"][0] mary
$jacky["tom"][1] kitty
$jacky["bob"][0] john
$jacky["bob"][1] carol

或用直接索引值方式宣告,例如:
$jack["tom"][0]="mary";
$jack["tom"][1]="kitty";
$jack["bob"][0]="john";
$jack["bob"][1]="carol";






陣列的相關函式
計算陣列裡有多少個元素(element)個數
PHP提供一個專門計算陣列的函式count(),回傳的值:其資料型態為「integer
範例:
$money=array("US","NT$","Penny");
echo(count($money));
顯示結果「3

透過count()函式的幫忙,可以省去自行計算陣列元素的麻煩
以上,若要將陣列裡的元素輸出,則程式如下:
For(i=0;i
   {
    echo($money[$i]);
   }
以上的程式碼,可以將陣列裡的元素一一輸出
而改用count()函式做元素計算,如此一來程式的重複使用性,就會提高許多


刪除陣列裡的元素
必須靠unset()函式來完成,這與刪除「變數」的方法是相同的,回傳的值:NA
舉例
Unset($student[3]);  //刪除陣列變數元素本身
Unset($st);          //刪除變數本身


陣列的排列
排序陣列的函式:sort($arr)rsort($arr)。回傳的值:NA
舉例:sort($name)遞增排序、rsort($score)遞減排序
輸出的結果,會依陣列內容值依序排列,當中的「索引值」會因為排序而變更
陣列sort()排序前
0個索引值:3陽開泰
1個索引值:1飛沖天
2個索引值:4季如春
3個索引值:2小無猜

陣列sort()排序後
0個索引值:1飛沖天
1個索引值:2小無猜
2個索引值:3陽開泰
3個索引值:4季如春
其實sort()函式會針對元素的內容值,進行排序後,再重新指定索引,
也就是從0開始,將排序後的元素值一一指定至其數字索引之內
檢查索引是否存在
函式:empty($arr)
回傳的值:若字串的索引存在則回傳false,反之則回傳true
舉例
$input="computer";

$dic["book"]="書籍";
$dic["map"]="地圖";
$dic["computer"]="電腦";

if(empty($dic[$input])==false)
{
 echo("\$dic[$input]存在"." is $dic[$input]");
}
else
{
 echo("\$dic[$input]不存在");
}
















列出陣列的索引內容(index)
如果索引在建立時,並非以連續數字依序建位或都以字串作為索引
此時若想一次取出所有的元素值,將會是一項煩人的工作
範例
$dic["book"]="書籍";
$dic["desk"]="書桌";
$dic["note"]="筆記";

while(list($index_A,$element_B)=each($dic))
{
 echo($index_A."&nbsp".$element_B."
");
}                         //$index_A為索引值 ,$element_B為內容值

顯示結果
book 書籍
desk 
書桌
note 
筆記


each()函式,可以傳回目前元素的索引及內容值之外,並將陣列的「指標」移到下一個元素
list()主要功能,如list($index,$element)即是將$dic陣列變數裡的「索引值」及「內容值」,分別指定給變數$index$element
each()函式,將依序取出陣列裡的每一個元素的索引及內容值,並傳給list()
並存入list()所設定的變數之中


沒有留言:

用頭腦去思考,不要人云亦云才好, 宗教信徒就是依賴與自私心態(求東求西)的人, 光是這點就很容易暴露弱點了, 難怪seafood吃飽飽,哈哈。 續上, 除了依賴與自私心態(兩者都是人性)之外。 另外也有很大一部份的人,是人云亦云的思考邏輯, 所以宗教才能譁眾取寵。