如何使用陣列 在
PHP
裡要使用陣列時,只要將變數進行「初始化」陣列時的程序即可。
範例:
$names[0] = "Jollen"
$names[1] = "Jordan"
$names[2] = "Kitty"
$names["howmany"] = 3;
scalar array 與 associative array
在上面的例子中,我們看到:
$names[3] = "Kitty"
是以 3 這個數值做索引,以數值做索引 (index, key) 的陣列稱為 scalar
array。
另外一個例子:
$names["howmany"] = 3;
以字串做索引的陣列我們稱為 associative array。
多維陣列
多維陣列的初始化與一維陣列方法相同,例如:
$alpha[0][0] = "A";
$alpha[0][1] = "B";
$alpha[1][0] = "C";
$alpha[1][1] = "D";
這種寫法等於:
$alpha[0][] = "A";
$alpha[0][] = "B";
$alpha[1][] = "C";
$alpha[1][] = "D";
陣列的內部指標
PHP
裡的陣列事實上是利用資料結構中的雙向鍵結串列來維護的,因此我們可以利用
next() 與 pre()
函數將陣列的內部指標往前或往後一個元素。陣列裡的指標除了利用
PHP 提供的函數外,外界無法直接去改變陣列的內部指標。
PHP 陣列函數 - array()、count()、current()、list()、next()、pre()、reset()、key()
array()
用途:
建立一個陣列,依給定的參數 (語法) 傳回陣列。
範例:
$name = array("Jollen", "Paul", "Ketty");
相當於:
$name[0] = "Jollen";
$name[1] = "Paul";
$name[2] = "Ketty";
array() 亦可為用在巢狀式陣列:
$fruits = array(
"fruits" =>
array("a"=>"orange","b"=>"banana","c"=>"apple"),
"numbers" => array(1, 2, 3, 4, 5, 6),
"holes" => array("first", 5 => "second",
"third")
);
上面為建立一個二維陣列的範例。此例相當於:
$fruits["fruits"]["a"] = "orange";
$fruits["fruits"]["b"] = "banana";
$fruits["fruits"]["c"] = "apple";
$fruits["numbers"][0] = 1;
$fruits["numbers"][1] = 2;
$fruits["numbers"][2] = 3;
$fruits["numbers"][3] = 4;
$fruits["numbers"][4] = 5;
$fruits["numbers"][5] = 6;
$fruits["holes"][0] = "first";
$fruits["holes"][5] = "second";
$fruits["holes"][6] = "third";
array() 事實上並不是函數,而是 PHP 提供的一個語法。
count()
定義:
int count(mixed var);
用途:
傳回 var (通常為陣列)
的元素個數,非陣列的變數則只有一個元素。沒果沒有這個 var
變數,則傳回 0;如果 var 不是陣列,則傳回 1。
範例:
$names = array("jollen", "nick", "frank");
echo count($names);
輸出:
3
current()
定義:
mixed current(array array);
用途:
傳回目前陣列裡的指標所指元素的「值」。每一個陣列都有一個內部的指標,指向其中的一個元素。陣列的所有元素利用雙向串列連接,這個指標便指向目前的元素。一開始這個指標是指到陣列的第一個元素,利用其它函數存取陣列時,便會改變這個指標,current()
便是傳回目前所指的陣列元素的值,但不會改變這個指標的位置。
傳回指標指向陣列的範圍之外的位置,便傳回 false。有一種情況要特別小心,當元素的值為
0 或是空字串 "" 時,也會傳回 false,此時可改用 echo() 函數。
list()
list() 並不是一個 function,而是像 array() 一樣,屬於 PHP 的語法。list()
用來一次給定多個值給多個變數。
範例:
<table>
<tr>
<th>Employee name</th>
<th>Salary</th>
</tr>
<?php
$result = mysql($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
print(" <tr>\n".
" <td><a
href=\"info.php3?id=$id\">$name</a></td>\n".
" <td>$salary</td>\n".
" </tr>\n");
}
?></table>
next()
定義:
mixed next(array array);
用途:
傳回下一個陣列指標所指的值,注意是先把指標往下移,再傳回值。如果元素的值是
0 或 "" (空字串),則傳回 false。當指標已指向陣列尾段,無法再往下移時,則傳回
false。
可利用 echo() 函數來觀察陣列中是否有 0 或 ""。
prev()
定義:
mixed prev(array array);
用途:
將陣列內部指標往前移前一位後,再傳回元素的值。
reset()
定義:
mixed reset(array array);
用途:將陣列的指標初始化,即移到第一個元素的位置,並且傳回第一個元素的值。
key()
定義:
mixed key(array array);
用途:
傳回目前 associative array 中的 key,即陣列內部指標所指元素位置的
key。
配合 reste()、next() 的綜合範例如下:
$fruits =
array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
arsort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."<br>";
}
輸出:
fruits[a] = orange
fruits[d] = lemon
fruits[b] = banana
fruits[c] = apple
迴圈由第一個元素開始拜訪所有的元素,到最後一個元素結束。 |