PHP 數組既是有序映射又是棧/隊列,掌握核心增刪查函數是高效開發的基石。本文系統整理棧/隊列操作、搜索判斷、鍵值提取三大類函數,附帶語法、返回值、典型示例與性能提示,適合作為桌面速查手冊。
| 函數 | 作用 | 返回值 | 鍵名影響 | 典型場景 |
|---|---|---|---|---|
array_push($arr, $v1, $v2...) | 尾部壓入(入棧/入隊) | 新數組長度(int) | 數值鍵重新索引,關聯鍵不變 | 收集日志、構建結果集 |
array_pop($arr) | 尾部彈出(出棧) | 被移除的值,空數組返回 null | 同上 | 撤銷操作、取最後一條記錄 |
array_unshift($arr, $v1, $v2...) | 頭部插入(入隊) | 新數組長度 | 數值鍵重新索引(+n),關聯鍵不變 | 優先隊列、置頂消息 |
array_shift($arr) | 頭部移除(出隊) | 被移除的值,空數組返回 null | 同上 | FIFO 隊列消費、輪詢任務 |
// 棧 LIFO $stack = []; array_push($stack, 1, 2, 3); // [1,2,3] echo array_pop($stack); // 3 → [1,2] // 隊列 FIFO $queue = []; array_push($queue, 'a', 'b'); // ['a','b'] echo array_shift($queue); // 'a' → ['b'] // 反向隊列(雙端) array_unshift($queue, 'head'); // ['head','b'] array_push($queue, 'tail'); // ['head','b','tail']
| 函數 | 簽名 | 返回值 | 嚴格模式 | 說明 |
|---|---|---|---|---|
in_array | in_array($needle, $haystack, $strict=false) | bool | $strict=true 同時比較類型 | 值存在性檢查,大數組性能較差(O(n)) |
array_key_exists | array_key_exists($key, $arr) | bool | 不適用 | 鍵存在性檢查,isset($arr[$key]) 更快但不檢測 null 值 |
array_search | array_search($needle, $haystack, $strict=false) | 匹配的鍵,失敗 false | 同 in_array | 需要知道鍵名時使用 |
array_keys | array_keys($arr, $search_value=null) | 所有鍵組成的數組 | 提供 $search_value 時過濾 | 批量獲取鍵、配合 array_search 反查 |
array_values | array_values($arr) | 所有值組成的數組(0-base 重索引) | 不適用 | 重置數值索引、提取純值列表 |
$users = [
['id'=>1, 'name'=>'Alice', 'role'=>'admin'],
['id'=>2, 'name'=>'Bob', 'role'=>'user'],
];
// 搜索 role=admin 的鍵
$keys = array_keys(array_column($users, 'role'), 'admin'); // [0]
$user = $users[$keys[0]]; // Alice
// 重置索引提取名單
$names = array_values(array_column($users, 'name')); // ['Alice','Bob']
in_array/array_search 為 O(n),頻繁查找請改用 isset($map[$key]) 或翻轉鍵值 array_flip 後用鍵查找 O(1)。array_shift/unshift 會重建數值索引,大數組頻繁操作性能差,考慮 SplQueue/SplStack 或雙端隊列 SplDoublyLinkedList。array_key_exists vs isset:前者檢測 null 值,後者不檢測;高頻判斷首選 isset。array_values 會複製整個數組,內存峰值翻倍,大數組慎用或分塊處理。$strict=true 能避免 '1' == 1 等隱式轉換導致的誤判。增:array_push($arr, $v...) → 尾部加,返回長度
array_unshift($arr, $v...) → 頭部加,返回長度
刪:array_pop($arr) → 尾部刪,返回值
array_shift($arr) → 頭部刪,返回值
查:in_array($v, $arr) → bool
array_key_exists($k, $arr) → bool
array_search($v, $arr) → key|false
array_keys($arr) → [keys]
array_values($arr) → [values] (re-index)
熟練掌握這 10 個核心函數,覆蓋 90% 的數組操作場景,代碼更簡潔、性能更可控。