陣列是 PHP 最核心的資料結構。掌握多種建立方式,能寫出更簡潔、效能更優的代碼。本文系統整理 5 大類建立方法,附輸出結果驗證。
<?php $numbers = [1, 3, 5, 7, 9]; $colors = ['red', 'blue', 'green']; $empty = []; // PHP 5.4+ 短語法 ?>
<?php $language = [1 => 'PHP', 3 => 'JAVA', 4 => 'C']; $student = ['name' => '張三', 'age' => 17]; ?>
特點:鍵可為整數或字串,混合使用自動轉型(字串數字鍵會轉為整數)。
<?php
$firstname = 'Peter';
$lastname = 'Griffin';
$age = 38;
$result = compact('firstname', 'lastname', 'age');
/*
Array (
[firstname] => Peter
[lastname] => Griffin
[age] => 38
)
*/
// 進階:搭配變數名陣列
$name = ['firstname', 'lastname'];
$result = compact($name, 'location', 'age'); // location 不存在會被略過
?>
適用場景:視圖層將多區域變數打包傳給模板引擎(如 Laravel compact('user','posts'))。
<?php
$keys = ['a', 'b', 'c', 'd'];
$values = ['Cat', 'Dog', 'Horse', 'Cow'];
$combined = array_combine($keys, $values);
/*
Array (
[a] => Cat
[b] => Dog
[c] => Horse
[d] => Cow
)
*/
?>
限制:兩陣列長度必須完全相同,否則拋出 Warning 並回傳 false。
<?php
// 數字範圍
range(0, 5); // [0,1,2,3,4,5]
range(0, 50, 10); // [0,10,20,30,40,50] 步長 10
range(5, 0); // [5,4,3,2,1,0] 反序
// 字元範圍
range('a', 'd'); // ['a','b','c','d']
range('Z', 'W'); // ['Z','Y','X','W']
?>
特點:支援字元遞增(ASCII 碼順序),不支援多位元組字元(中文不可用)。
<?php
// 從索引 2 開始,填 3 個 'Dog'
$a = array_fill(2, 3, 'Dog');
/*
Array (
[2] => Dog
[3] => Dog
[4] => Dog
)
*/
// 多維陣列初始化
$matrix = array_fill(0, 3, array_fill(0, 4, 0)); // 3x4 零矩陣
?>
| 方法 | 適用場景 | 相對速度 | 記憶體 |
|---|---|---|---|
[] / array() | 通用、已知鍵值 | 基準 | 基準 |
compact() | 變數打包 | 略慢(符號表查找) | 略高 |
array_combine() | 鍵值分離來源 | 中等 | 中等 |
range() | 連續序列 | 極快(C 級實現) | 低 |
array_fill() | 固定值重複 | 極快 | 低 |
[] 字面量,可讀性最高range(),避免迴圈array_fill(),語意明確compact(),減少重複鍵名輸入array_combine(),注意長度檢查<?php // 解包運算子合併陣列 $defaults = ['host' => 'localhost', 'port' => 3306]; $custom = ['port' => 3307, 'charset' => 'utf8mb4']; $config = [...$defaults, ...$custom]; // ['host' => 'localhost', 'port' => 3307, 'charset' => 'utf8mb4'] ?>