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

PHP 陣列長度獲取:count() vs sizeof() 深度對比與最佳實踐

     編輯:PHP 相關知識

函數簽名

count(Countable|array $value, int $mode = COUNT_NORMAL): int
sizeof(Countable|array $value, int $mode = COUNT_NORMAL): int // count() 別名

結論:sizeof() 是 count() 的別名,功能完全一致,官方推薦使用 count(),語義更清晰。

參數詳解

  • $value:陣列或實現 Countable 介面的物件。
  • $mode:
    • COUNT_NORMAL (0):默認,不遞歸計算多維陣列。
    • COUNT_RECURSIVE (1):遞歸計算所有子陣列元素總數。

行為差異示例

<?php
$arr = [
    'fruits' => ['apple', 'banana'],
    'colors' => ['red', 'green', 'blue'],
    'single' => 'value'
];

echo count($arr);           // 3 (頂層鍵數)
echo count($arr, 1);        // 8 (3 + 2 + 3 + 1 純量也算 1)
echo sizeof($arr);          // 3 同 count()

$obj = new class implements Countable {
    public function count(): int { return 42; }
};
echo count($obj);           // 42

// 陷阱:非陣列/不可計數變量
$nullVar = null;
echo count($nullVar);       // 0 (PHP 7.2+ 拋出 Warning,8.0+ 拋出 TypeError)
echo count('string');       // 1 字符串視為單元素

性能對比

兩者編譯為相同 Opcode,零性能差異。但 count() 在循環條件中會被優化器識別:

// 差:每次迭代調用 count()
for ($i = 0; $i < count($arr); $i++) { ... }

// 優:預存長度
$len = count($arr);
for ($i = 0; $i < $len; $i++) { ... }

// 最佳:foreach 直接遍歷
foreach ($arr as $item) { ... }

最佳實踐

  1. 統一使用 count(),棄用 sizeof()。
  2. PHP 7.2+ 對不可計數類型發出 Warning,8.0+ 拋出 TypeError,建議先 is_array() 或 is_countable() (PHP 7.3+) 判斷。
  3. 多維陣列總元素數用 count($arr, COUNT_RECURSIVE),注意純量值也計為 1。
  4. 高頻循環務必將 count() 提取到循環外。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved