陣列是 PHP 最核心的資料結構,掌握其鍵(Key)與值(Value)的規則對避免難以除錯的 Bug 至關重要。本文透過實測案例,系統說明鍵的合法型別、自動轉換機制、索引重算規則與實務建議。
$arr = [
-1 => '負整數鍵',
'01' => '字串鍵(保留前導零)',
8 => '無鍵值,自動指派索引 0',
'a' => '字串鍵',
'b' => true, // 值可為布林
null => '值為 null', // 鍵為 null 會轉為空字串 ''
'' => '空字串鍵',
1.2 => '浮點數鍵會截取整數部分 1',
];
Array
(
[-1] => 負整數鍵
[01] => 字串鍵(保留前導零)
[0] => 8
[1] => a
[b] => 1
[] =>
[1] => 0.5 // 覆蓋先前索引 1 的值
[2] =>
[3] =>
)
1.9 => 1,-2.5 => -2)。'123')不會自動轉為整數,保留字串型別('01' != 1)。'1a'、'01')維持字串。null、false、'' 作為鍵皆轉為空字串 ''。true => 1、false => 0(整數轉換)。Resource id #N 字串,極不建議使用。Illegal offset type 警告。-1 後自動指派 0)。| 場景 | 風險 | 建議 |
|---|---|---|
| 資料庫 ID 為字串主鍵 | '001' 與 1 視為不同鍵 |
統一轉型 (string)$id 或 (int)$id |
合併陣列 + 運算子 |
整數鍵重複時後者被捨棄 | 改用 array_merge()(重新索引)或 array_replace()(保留鍵) |
json_encode 輸出 |
連續整數鍵輸出陣列 [],非連續/字串鍵輸出物件 {} |
若需強制物件,使用 JSON_FORCE_OBJECT |
深入理解鍵值規則,能讓你在處理表單資料、API 回應、快取結構時游刃有餘,避免「明明有資料卻取不到」的靈異現象。