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) { ... }
count(),棄用 sizeof()。TypeError,建議先 is_array() 或 is_countable() (PHP 7.3+) 判斷。count($arr, COUNT_RECURSIVE),注意純量值也計為 1。count() 提取到循環外。