PHP 數組本質:有序映射(Ordered Map)
PHP 數組同時支持 整數鍵(索引數組) 與 字符串鍵(關聯數組),且鍵值有序,底層是哈希表雙向鏈表實現,極其靈活強大。
兩大基本類型
索引數組(整數鍵)
$user = [];
$user[0] = 1;
$user[1] = '張三';
$user[2] = 'aaa@bb.com';
// 等同於
$user = [1, '張三', 'aaa@bb.com'];
關聯數組(字符串鍵)
$user = [
'id' => 1,
'name' => '張三',
'email' => 'aaa@bb.com'
];
$user['name'] = '李四'; // 修改值
四種聲明方式對比
| 方式 | 語法 | 特點 |
| 直接賦值 | $arr[] = $val | 自動遞增整數鍵,靈活但易產生非連續鍵 |
| array() 函數 | array(1, 2, 'a' => 3) | PHP 5.4 前標準寫法,支持混合鍵 |
| 短語法 [] | [1, 2, 'a' => 3] | PHP 5.4+ 推薦,簡潔易讀 |
| range()/compact() | range(1,10) compact('a','b') | 特定場景快速生成 |
關鍵行為規則(必須掌握)
- 鍵自動遞增:整數鍵未指定時,從現有最大整數鍵 + 1 開始
- 字符串數字鍵轉整數:
'08' → 8,'07' → 7(去前導零),'1e2' → '1e2'(非純數字保留字符串)
- 浮點數鍵截斷:
3.14 → 3,-2.9 → -2
- 布爾/Null 鍵轉換:
true → 1,false → 0,null → ''
- 重複鍵後勝:同鍵多次賦值,最後一次生效
- 索引與關聯互不干擾:整數鍵序列與字符串鍵獨立共存
二維/多維數組構建
五大遍歷方式性能與適用場景
| 方式 | 語法 | 適用場景 | 性能 | 注意 |
| foreach (推薦) | foreach ($arr as $k => $v) | 所有數組,最通用 | ⭐⭐⭐⭐⭐ | 值傳遞默認拷貝,引用用 &$v |
| for 循環 | for($i=0;$i | 純連續索引數組 | ⭐⭐⭐ | 非連續/關聯數組會漏值 |
| while + each() | while(list($k,$v)=each($arr)) | 極少用,內部指針操作 | ⭐⭐ | PHP 7.2 棄用,8.0 移除 |
| array_walk | array_walk($arr, fn($v,$k)=>...) | 需修改原數組值 | ⭐⭐⭐ | 回調參數順序 $value, $key |
| array_map | array_map(fn($v)=>..., $arr) | 轉換生成新數組 | ⭐⭐⭐⭐ | 不改原數組,函數式風格 |
實戰技巧集錦