前言
PHP 陣列含有陣列和字典兩種使用方式。實務上,會將兩種形式分開,不建議在同一個陣列中混用。
其實 PHP 陣列的內部實作是有序映射 (出處),陣列的部分是模擬出來的。使用時知道其原理即可,語法上還是當成陣列來用。
建立陣列
以下 PHP 程式建立陣列:
<?php
$arr = array("foo", "bar", "baz", "qux");
也可以寫成:
<?php
$arr = array(
"foo",
"bar",
"baz",
"qux",
);
在第二種寫法時,習慣會在尾端加上逗號。日後就可以再新增元素。
也可以先建立空陣列後再逐一加入元素:
<?php
$arr = array();
$arr[] = "foo";
$arr[] = "bar";
$arr[] = "baz";
$arr[] = "qux";
這裡實際用到存入陣列元素的語法。不指定陣列索引時,會自動將元素附加在陣列尾端。
存取陣列元素
陣列以非負整數做為其索引 (index)。注意第一個元素的索引為 0
,因為存取陣列元素是以其偏移值 (offset) 來存取。以下是實際使用例:
<?php
$arr = array("foo", "bar", "baz", "qux");
# Retrieve first element of `$arr`.
"foo" == $arr[0] or die("Wrong value");
# Mutate first element of `$arr`.
$arr[0] = "quuz";
# Retrieve first element of `$arr` again.
"quuz" == $arr[0] or die("Wrong value");
$arr[0]
的部分即為存取陣列元素。
在 PHP 7.4 (含) 以前,$arr[0]
和 $arr{0}
是同義的。但後者在 PHP 8.0 後不再支援,故不應使用。
走訪陣列
由於陣列索引是有序的整數,可以用計數器來走訪:
<?php
$arr = array("foo", "bar", "baz", "qux");
for ($i = 0; $i < count($arr); ++$i) {
echo $arr[$i], PHP_EOL;
}
若不需要計數器的話,也可以直接以隱式迭代器來走訪:
<?php
$arr = array("foo", "bar", "baz", "qux");
foreach ($arr as $elem) {
echo $elem, PHP_EOL;
}
注意這裡的 as
的語法,是容器在前,元素在後。
建立字典
PHP 陣列本身為有序映射,當然可以當成字典來用。以下 PHP 程式建立字典:
<?php
$dict = array(
"one" => "eins",
"two" => "zwei",
"three" => "drei",
);
字典是以鍵值對 (key-value pair) 組成。前者為鍵 (key),後者為值 (value)。
其實 =>
(fat comma) 只是逗點的另一種寫法。將其還原成逗點的寫法如下:
<?php
$dict = array(
"one", "eins",
"two", "zwei",
"three", "drei",
);
這裡可看得出來,其實陣列和字典使用相同的語法。不過,字典要成對的鍵值對,故元素數量要偶數個。
也可以先建空字典後再逐一增加鍵值對:
<?php
$dict = array();
$dict["one"] = "eins";
$dict["two"] = "zwei";
$dict["three"] = "drei";
存取字典元素
字典以鍵為索引取值。以下是實例:
<?php
$dict = array(
"one" => "eins",
"two" => "zwei",
"three" => "drei",
);
# Retrieve a value by a key from a dictionary.
"zwei" == $dict["two"] or die("Wrong value");
# Add a new pair of key and value.
$dict["four"] = "vier";
# Retrieve values by keys from a dictionary.
"vier" == $dict["four"] or die("Wrong value");
"zwei" == $dict["two"] or die("Wrong value");
確認鍵值對是否存在
使用 array_key_exists 函式可確認特定鍵在字典中是否存在。以下是實例:
<?php
$dict = array(
"one" => "eins",
"two" => "zwei",
"three" => "drei",
);
array_key_exists("two", $dict) or die("It should exist");
!array_key_exists("four", $dict) or die("It should not exist");
有時候字典的鍵值對是在程式中動態建立的,無法預先知道鍵值對是否存在,這時候就可以先用此函式確認鍵值對存在。
走訪字典
由於字典的鍵是字串,無法使用計數器。走訪字典的方式是以 array_keys 取得所有的鍵後,以鍵來走訪字典。實例如下:
<?php
$dict = array(
"one" => "eins",
"two" => "zwei",
"three" => "drei",
);
foreach (array_keys($dict) as $key) {
echo "$key => $dict[$key]", PHP_EOL;
}
如果不需要鍵,只需要值。可以改用 array_values:
<?php
$dict = array(
"one" => "eins",
"two" => "zwei",
"three" => "drei",
);
foreach (array_values($dict) as $value) {
echo $value, PHP_EOL;
}