| 函數 | 用途 | 回傳值 | 注意事項 |
|---|---|---|---|
count($arr, mode) | 計算陣列元素總數 | 整數 | mode=COUNT_RECURSIVE(1) 可遞迴計算多維陣列 |
sizeof($arr, mode) | count() 別名 | 整數 | 功能完全相同,語意上建議用 count() |
array_count_values($arr) | 統計每個「值」出現次數 | 關聯陣列 [值=>次數] | 僅適用一維陣列,值必須為 scalar |
<?php
$arr = [4, 5, 1, 2, 3, 1, 2, 1];
echo count($arr); // 8
echo sizeof($arr); // 8
// 遞迴計數(多維陣列)
$multi = [[1,2], [3,4,5]];
echo count($multi, COUNT_RECURSIVE); // 7 (2個子陣列 + 5個元素)
// 統計值頻率
$freq = array_count_values($arr);
print_r($freq);
/*
Array
(
[4] => 1
[5] => 1
[1] => 3
[2] => 2
[3] => 1
)
*/
?>
<?php $var = null; echo count($var); // 1 (PHP 7.2+ 拋出 Warning,PHP 8+ 拋出 TypeError) echo count((array)$var); // 安全做法:強制轉型 ?>
<?php $empty = []; $undef; // 未定義 echo count($empty); // 0 echo count($undef); // 0 (但會有 Warning/Error) ?>
<?php
class Collection implements Countable {
private $items = [];
public function count(): int { return count($this->items); }
}
$obj = new Collection();
echo count($obj); // 可正常運作,需實作 Countable 介面
?>
網友提供的實用邏輯:將多組逗號字串合併統計各值出現次數
<?php
$arr = [
'1011,1003,1008,1001,1000,1004,1012',
'1009',
'1011,1003,1111'
];
$result = [];
foreach ($arr as $str) {
foreach (explode(',', $str) as $v) {
$result[$v] = ($result[$v] ?? 0) + 1;
}
}
print_r($result);
/*
Array
(
[1011] => 2
[1003] => 2
[1008] => 1
[1001] => 1
[1000] => 1
[1004] => 1
[1012] => 1
[1009] => 1
[1111] => 1
)
*/
?>
count() 是 O(1) 操作(陣列內部維護元素數),不要放在迴圈條件中重複呼叫for($i=0; $i$len = count($arr); for($i=0; $i<$len; $i++) 或直接 foreachcount()array_count_values()count($arr, COUNT_RECURSIVE)null/未定義變數的型別安全