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

PHP 陣列元素計數完全指南:count()、sizeof()、array_count_values() 差異與陷阱

     編輯:PHP 相關知識

三大計數函數對比

函數用途回傳值注意事項
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
)
*/
?>

常見陷阱與邊界情況

1. 非陣列變數傳入

<?php
$var = null;
echo count($var);     // 1 (PHP 7.2+ 拋出 Warning,PHP 8+ 拋出 TypeError)
echo count((array)$var); // 安全做法:強制轉型
?>

2. 空陣列 vs 未定義變數

<?php
$empty = [];
$undef; // 未定義

echo count($empty);  // 0
echo count($undef);  // 0 (但會有 Warning/Error)
?>

3. 物件計數

<?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++) 或直接 foreach

總結建議

  • 單純計算長度 → count()
  • 需要值頻率分佈 → array_count_values()
  • 多維陣列總元素數 → count($arr, COUNT_RECURSIVE)
  • 永遠記得處理 null/未定義變數的型別安全
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved