首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 陣列鍵值規則深度解析:整數、字串與型別轉換陷阱

     編輯:PHP 相關知識

陣列是 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. 整數鍵:包含正負整數,不包含浮點數。浮點數鍵會自動截取整數部分(1.9 => 1,-2.5 => -2)。
  2. 字串鍵:
    • 純數字字串(如 '123')不會自動轉為整數,保留字串型別('01' != 1)。
    • 含非數字字元(如 '1a'、'01')維持字串。
    • null、false、'' 作為鍵皆轉為空字串 ''。
  3. 布林值鍵:true => 1、false => 0(整數轉換)。
  4. 資源型別鍵:會產生 Resource id #N 字串,極不建議使用。
  5. 陣列/物件不可為鍵:會拋出 Illegal offset type 警告。

索引自動指派機制

  • 未指定鍵時,自動使用「目前最大整數鍵 + 1」作為下一個索引。
  • 若無整數鍵存在,從 0 開始。
  • 負整數鍵不影響正索引遞增(見範例中 -1 後自動指派 0)。

實務避坑指南

場景風險建議
資料庫 ID 為字串主鍵 '001' 與 1 視為不同鍵 統一轉型 (string)$id 或 (int)$id
合併陣列 + 運算子 整數鍵重複時後者被捨棄 改用 array_merge()(重新索引)或 array_replace()(保留鍵)
json_encode 輸出 連續整數鍵輸出陣列 [],非連續/字串鍵輸出物件 {} 若需強制物件,使用 JSON_FORCE_OBJECT

深入理解鍵值規則,能讓你在處理表單資料、API 回應、快取結構時游刃有餘,避免「明明有資料卻取不到」的靈異現象。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved