位元詩人 [PHP] 程式設計教學:陣列 (Array)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

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;
}
關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。