2010年11月24日 星期三

PHP的陣列(Arrays)

陣列是多個數值的集合,並藉由索引(index)以區別該陣列中的變數。

陣列在各個程式語言中都可以找的到它的蹤跡,也是非常重要的觀念之一,在使用之前,必須先瞭解它的觀念。



陣列可以是一維、二維、三維或是以上。

以一維列來說名,一個名為a的陣列如下:
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]

我們過,陣列是藉由索引來區別陣列中的變數,仔細觀看上方的一維陣列,在PHP中,陣列的起始索引是由0開始到無限,而且你不須要預先宣告陣列大小(一開始我們就提過,PHP是比較鬆散的語法),所以它不止可以到A[5],可以一直延下去。

PHP一維陣列的宣告方式以下兩種方式:
$cars=array("Saab","Volvo","BMW","Toyota");

$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";

其實這兩種方式所造生的結果並沒有什麼不一樣,看個人習慣選擇,以及它的輸出方式如下:
<?php
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
echo $cars[0] . " and " . $cars[1] . " are Swedish cars.";
?>

輸出:
Saab and Volvo are Swedish cars.


別外還有一種陣列的宣告方式:
$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);

$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";

這樣的宣告方式,是使用名稱索引,同樣的,兩種宣告方式沒什麼不一樣,看個人習慣而定。

而呼叫使用方式,則是將原本的數字索引方式做個變化而已:
<?php
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";

echo "Peter is " . $ages['Peter'] . " years old.";
?>

輸出:
Peter is 32 years old.


我配合switch做個簡單的改寫:
<?php
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";

Switch($x){
  Case Peter:
    echo $x.“ is " . $ages['$x'] . " years old.";
Case Quagmire:
    echo $x.“ is " . $ages['$x'] . " years old.";
Case Peter:
    echo $x.“ is " . $ages['$x'] . " years old.";
  default:
    echo “No body.”;
}
>?



而二維陣列長怎樣呢?如下:
A[0,0]
A[1,0]
A[2,0]
A[3,0]
A[4,0]
A[5,0]
A[0,1]
A[1,1]
A[2,1]
A[3,1]
A[4,1]
A[5,1]
A[0,2]
A[1,2]
A[2,2]
A[3,2]
A[4,2]
A[5,2]

就是一般我們常見的二維表格,除了像一維陣列一般會橫向遞增外,多了縱向的觀念。

這邊我們連同三維陣列一併講解,多維陣列的語法如下:
$array[index 1] [index 2]=element;  //2
$array[index 1] [index 2] [index 3]=element; //3維,之後以此類推

Example:
$a[1][0]=50;
$b[4][6]=30;

我們來實作一個將二維表格陣列化的過程:
產品
成本
售價
西瓜
60
68
香蕉
50
55
蘋果
12
18

宣告語法如下:
$x[0][0]=”產品”;
$x[0][1]=”成本”;
$x[0][2]=”售價”;

$x[1][0]=”西瓜”;
$x[1][1]=”60”;
$x[1][2]=”68”;

$x[2][0]=”香蕉”;
$x[2][1]=”50”;
$x[2][2]=”55”;

$x[3][0]=”蘋果”;
$x[3][1]=”12”;
$x[3][2]=”18”;

以這個例子來看,我標上索引,讓結果更清楚
產品[0,0]
成本[0,1]
售價[0,2]
西瓜[1,0]
60[1,1]
68[1,2]
香蕉[2,0]
50[2,1]
55[2,2]
蘋果[3,0]
12[3,1]
18[3,2]

另外,我們也可以使一種方式宣告:
$x=array(array(“產品”, ”成本”, ”售價”),
array(“西瓜”, ”60”, ”68”),
array(“香蕉”, ”50”, ”55”),
array(“蘋果”, ”12”, ”18”));

這兩種顯告方式結果並沒有不一樣,一樣是看個人習慣而定。

那或許你會問,一維陣列,有名稱式索引宣告,那多維呢?當然也是有的。

Example:
$families = array("Griffin"=>array("Peter","Lois","Megan"),
              "Quagmire"=>array("Glenn"),
              "Brown"=>array("Cleveland","Loretta","Junior"));

這樣會跟數值索引有什麼不一樣?當然,在輸出的時候有所差別,如果是用名稱索引的話,你要這樣使用。

以上所述之陣列:
<?PHP
Echo $families[Griffin][0].”</br>”;
Echo $families[Griffin][1]; ”</br>”
Echo $families[Griffin][2]; ”</br>”

Echo $families[Quagmire][0]; ”</br>”

Echo $families[Brown][0]; ”</br>”
Echo $families[Brown][1]; ”</br>”
Echo $families[Brown][2];

?>

輸出:
Peter
Lois
Megan
Glenn
Cleveland
Loretta
Junior

目前為止對於陣列的使用有沒有更瞭解了呢?陣列相當重要的概念,希望你能夠弄懂它,對於後面的程式開發會相當的有所助益。

PHPMySQL網頁設計實務/網奕出版/吳權威 編著

沒有留言:

張貼留言