陣列是 PHP 最核心的資料結構,掌握多樣的建立方式能寫出更簡潔、高效的代碼。本文整理五大建立方法,附上實戰範例與適用場景。
array() / [] 語法結構(最常用)PHP 5.4+ 支援短陣列語法 [],語意清晰、效能最佳。
<?php
// 索引陣列
$numbers = [1, 3, 5, 7, 9];
$colors = ['red', 'blue', 'green'];
// 關聯陣列
$language = [1 => 'PHP', 3 => 'JAVA', 4 => 'C'];
$student = ['name' => '張三', 'age' => 17];
// 空陣列
$result = [];
// 多維陣列
$users = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
];
?>
compact() 將變數打包成關聯陣列適用於「已有同名變數需組裝成陣列」的場景(如 MVC Controller 傳遞變數給 View)。
<?php
$firstname = 'Peter';
$lastname = 'Griffin';
$age = 38;
// 方式 1:列出變數名字串
$arr1 = compact('firstname', 'lastname', 'age');
// ['firstname'=>'Peter', 'lastname'=>'Griffin', 'age'=>38]
// 方式 2:混合陣列與字串(不存在的變數會被忽略)
$name = ['firstname', 'lastname'];
$arr2 = compact($name, 'location', 'age'); // location 不存在被略過
// ['firstname'=>'Peter', 'lastname'=>'Griffin', 'age'=>38]
?>
array_combine() 合併鍵陣列與值陣列適用於「從兩個平行陣列建立關聯對應」,如 CSV 欄位名與資料列、資料庫欄位與值。
<?php
$keys = ['a', 'b', 'c', 'd'];
$values = ['Cat', 'Dog', 'Horse', 'Cow'];
$combined = array_combine($keys, $values);
// ['a'=>'Cat', 'b'=>'Dog', 'c'=>'Horse', 'd'=>'Cow']
// ⚠️ 兩陣列長度必須相同,否則拋出 Warning 並返回 false
?>
range() 產生等差數列/字元序列快速建立數字範圍、字母序列,支援步長控制。
<?php
// 數字 0~5
range(0, 5); // [0,1,2,3,4,5]
// 數字 0~50 步長 10
range(0, 50, 10); // [0,10,20,30,40,50]
// 字母 a~d
range('a', 'd'); // ['a','b','c','d']
// 反序
range(5, 0); // [5,4,3,2,1,0]
// 實戰:產生下拉選單年份選項
$years = array_combine(range(2024, 1990), range(2024, 1990));
// [2024=>2024, 2023=>2023, ..., 1990=>1990]
?>
array_fill() 以固定值填充陣列適用於初始化固定長度陣列、建立預設值佔位、單元測試資料準備。
<?php
// 從索引 2 開始,3 個元素,值為 'Dog'
array_fill(2, 3, 'Dog');
// [2=>'Dog', 3=>'Dog', 4=>'Dog']
// 實戰:初始化 100 個預設為 0 的計數器
$counters = array_fill(0, 100, 0);
// 實戰:建立 5x5 棋盤預設值
$board = array_fill(0, 5, array_fill(0, 5, null));
?>
| 函數 | 用途 | 範例 |
|---|---|---|
array_keys() | 取得陣列所有鍵名 | array_keys($arr) |
array_values() | 重設數字索引(取值陣列) | array_values($arr) |
array_flip() | 交換鍵值 | array_flip(['a'=>1, 'b'=>2]) → [1=>'a', 2=>'b'] |
array_merge() | 合併多個陣列(數字鍵重設) | array_merge([1,2], [3,4]) → [1,2,3,4] |
array_fill_keys() | 指定鍵名陣列填充同一值 | array_fill_keys(['a','b','c'], 0) → ['a'=>0,'b'=>0,'c'=>0] |
[] 語法,語意最清晰、OPcache 優化最好。compact(),平行陣列→關聯用 array_combine()。array_fill(),序列用 range()。[] 追加,預先 array_fill() 再賦值,或使用 Generator 產生器逐筆產出。五種核心建立方法各有專長:[] 通用宣告、compact() 變數打包、array_combine() 雙陣列合併、range() 序列產生、array_fill() 固定值填充。熟練運用並搭配進階輔助函數,能讓陣列操作代碼更具表達力與效能。