array() 是 PHP 中創建數組的語言構造(非函數),支援鍵值對、自動索引、多維嵌套。PHP 5.4+ 推薦使用短語法 [],功能完全一致且更簡潔。
<?php
// 1. 索引數組(自動 0 起索引)
$colors = ['red', 'green', 'blue']; // 短語法
$colors = array('red', 'green', 'blue'); // 經典語法
// 2. 關聯數組(字符串鍵)
$user = [
'name' => '張三',
'age' => 28,
'email' => 'zhang@example.com'
];
// 3. 混合鍵:整數鍵指定後,後續自動索引從最大整數鍵+1 開始
$mix = [1 => 'a', 'b', 5 => 'c', 'd']; // 鍵:1,2,5,6
var_dump($mix);
/*
array(4) {
[1]=> string(1) "a"
[2]=> string(1) "b"
[5]=> string(1) "c"
[6]=> string(1) "d"
}
*/
$data = [
'fruits' => [
'a' => '橙子',
'b' => '香蕉',
'c' => '蘋果'
],
'numbers' => [1, 2, 3, 4, 5, 6],
'holes' => ['first', 5 => 'second', 'third'] // 鍵:0,5,6
];
// 訪問
echo $data['fruits']['b']; // 香蕉
echo $data['holes'][5]; // second
$arr = ['key' => 'value'];
echo "Hello {$arr['key']}!"; // 正確:花括號包裹
// echo "Hello $arr['key']!"; // 錯誤:語法解析異常
| 分類 | 函數 | 說明 | 返回值 |
|---|---|---|---|
| 創建/合併 | array() / [] | 創建數組 | array |
| array_merge() | 合併數組(字符串鍵後覆蓋前,數字鍵重新索引) | array | |
| array_merge_recursive() | 遞歸合併(相同字符串鍵值變為數組) | array | |
| array_combine() | 用一個數組作鍵、另一個作值創建新數組 | array | |
| array_fill() | 用指定值填充指定長度 | array | |
| range() | 創建範圍數組 range(1,5)→[1,2,3,4,5] | array | |
| 查找/過濾 | in_array() | 檢查值是否存在(嚴格模式第3參數 true) | bool |
| array_search() | 搜索值,返回對應鍵(首次匹配) | mixed|false | |
| array_key_exists() / isset($arr[$key]) | 檢查鍵是否存在(isset 不檢查 null 值) | bool | |
| array_filter() | 回調過濾元素(保留返回 true 的) | array | |
| array_unique() | 移除重複值(保留首次出現的鍵) | array | |
| array_column() | 提取多維數組某一列 array_column($users,'name') | array | |
| 鍵值操作 | array_keys() | 獲取所有鍵 | array |
| array_values() | 獲取所有值(重新索引 0...) | array | |
| array_flip() | 交換鍵值(值必須為字符串/整數) | array | |
| array_change_key_case() | 鍵名統一大小寫 | array | |
| array_reverse() | 翻轉順序 | array | |
| shuffle() | 打亂順序(原地修改) | bool | |
| 排序 | sort() / rsort() | 值排序(重新索引) | bool |
| asort() / arsort() | 值排序(保持鍵關聯) | bool | |
| ksort() / krsort() | 鍵排序 | bool | |
| natsort() / natcasesort() | 自然排序(人類直覺順序:img2 < img10) | bool | |
| usort() / uasort() / uksort() | 用戶自定義比較函數排序 | bool | |
| array_multisort() | 多數組/多維排序 | bool | |
| 堆疊/隊列 | array_push() / array_pop() | 棧操作(尾部進出) | int/mixed |
| array_unshift() / array_shift() | 隊列操作(頭部進出,重新索引) | int/mixed | |
| array_slice() | 切片(不修改原數組) | array | |
| array_splice() | 切割並替換(修改原數組) | array(被移除元素) | |
| array_pad() | 填充到指定長度 | array | |
| array_rand() | 隨機取一或多個鍵 | mixed | |
| 計算/統計 | count() / sizeof() | 元素個數 | int |
| array_sum() | 值求和 | number | |
| array_product() | 值求積 | number | |
| array_count_values() | 統計值出現次數 | array | |
| array_reduce() | 遞歸減簡為單一值 | mixed | |
| array_map() | 回調映射每個元素 | array | |
| 交集/差集 | array_intersect() | 交集(比較值) | array |
| array_diff() | 差集(比較值) | array | |
| array_intersect_assoc() | 交集(比較鍵+值) | array | |
| array_diff_assoc() | 差集(比較鍵+值) | array | |
| array_intersect_key() | 交集(比較鍵) | array | |
| array_diff_key() | 差集(比較鍵) | array | |
| 指針/遍歷 | current() / key() / next() / prev() / reset() / end() | 內部指針操作 | mixed |
| each() | 返回鍵值對並前進指針(PHP 7.2 棄用,8.0 移除) | array|false | |
| list() / [] | 解包賦值 [$a,$b] = $arr | void | |
| extract() | 將鍵值導入符號表(慎用,安全風險) | int |
extract($_POST):污染全局命名空間,安全隱患極大。in_array($needle, $haystack, true) 避免 '123' == 123 導致誤判。foreach ($arr as &$v) $v *= 2; 循環後 unset($v) 解除引用,否則污染最後一個元素。yield 替代 array_map,或用 SplFixedArray(固定長度、類 C 數組、內存省 50%)。json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES),json_decode($json, true) 強制返回關聯數組。// 判斷是否為列表(連續整數鍵 0...n) array_is_list(['a','b','c']); // true array_is_list([1=>'a','b']); // false (鍵不從0開始) array_is_list(['a'=>1]); // false (字符串鍵) // 判斷是否為關聯數組(非列表) array_is_assoc([]); // false (空數組視為列表) array_is_assoc([0=>'a']); // false array_is_assoc(['x'=>1]); // true
掌握以上核心函數與陷阱,數組操作將不再是 Bug 溫床,而是高效表達業務邏輯的利器。