PHP 提供多種陣列統計函式,本文詳細解析 count()、sizeof()、array_count_values() 的用法差異、效能特性與適用場景,避免常見誤區。
$arr = array('0', '1', '2', '3', '4');
echo count($arr); // 輸出 5
// 多維陣列遞迴統計
$multi = array(1, 2, array(3, 4, array(5, 6)));
echo count($multi, COUNT_RECURSIVE); // 輸出 8 (含子陣列本身)
sizeof() 完全等同於 count(),僅為別名函式,效能相同。建議統一使用 count() 提升程式碼可讀性。
$array = array(4, 5, 1, 2, 3, 1, 2, 1);
$ac = array_count_values($array);
print_r($ac);
/* 輸出:
Array (
[4] => 1
[5] => 1
[1] => 3
[2] => 2
[3] => 1
) */
| 函式 | 用途 | 時間複雜度 | 注意事項 |
|---|---|---|---|
| count() | 元素總數 | O(1) | PHP 陣列內部維護計數器,極快 |
| array_count_values() | 值頻率統計 | O(n) | 僅適用一維陣列,值必須為 scalar (int/string) |
array_count_values()
// 錯誤:會觸發 Warning $multi = [[1,2], [2,3]]; array_count_values($multi);
function flattenArray($arr) {
$result = [];
array_walk_recursive($arr, function($v) use (&$result) {
$result[] = $v;
});
return $result;
}
$flat = flattenArray($multi);
$stats = array_count_values($flat);
count() 回傳 0,不會報錯(PHP 7.2+ 對非陣列發出 Warning)$users = [
['name'=>'Alice', 'city'=>'Taipei'],
['name'=>'Bob', 'city'=>'Taichung'],
['name'=>'Cathy', 'city'=>'Taipei'],
];
$cities = array_column($users, 'city');
$cityStats = array_count_values($cities);
// ['Taipei'=>2, 'Taichung'=>1]