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

PHP 獲取陣列中出現次數最多的元素:array_count_values + arsort + array_slice 組合拳

     編輯:PHP 綜合知識

統計陣列元素頻率並取 Top N,是資料分析、推薦系統、日誌聚合常見需求。本文提供一個 mostRepeatedValues() 函數:array_count_values 計頻 → arsort 降序保持鍵關聯 → array_slice 取前 N,並處理空陣列、非陣列輸入、型別敏感等邊界情況。

核心函數實作

 5, '值B' => 3, ...]

    // 2. 按次數降序排序,保持鍵關聯
    arsort($counts);

    // 3. 限制返回數量
    if ($limit > 0) {
        $counts = array_slice($counts, 0, $limit, true); // true 保持鍵
    }

    return $counts;
}

// 測試
$data = [1, 1, 1, 54, 3, 4, 3, 4, 3, 14, 3, 4, 3, 7, 8, 9, 12, 45, 66, 5, 7, 8, 9, 2, 45];
$result = mostRepeatedValues($data, 5);
print_r($result);
/*
Array
(
    [3] => 5   ← 數字 3 出現 5 次 (最多)
    [4] => 3   ← 數字 4 出現 3 次
    [1] => 3   ← 數字 1 出現 3 次
    [9] => 2
    [45] => 2
)
*/

關鍵函數行為解析

函數作用關鍵特性
array_count_values()統計值頻率鍵為原值 (需為 scalar: int/string),值為次數。非 scalar 會拋 Warning 並跳過。
arsort()降序排序保持鍵不同於 rsort() 重置索引,arsort 保持「值→次數」關聯。
array_slice($arr, 0, $n, true)取前 N 保持鍵第 4 參數 true 關鍵:保持原鍵 (元素值),否則重置為 0,1,2... 導致無法知曉是哪個值。

進階變體:多維陣列/物件屬性頻率統計

// 1. 多維陣列扁平化後統計
$flat = array_merge_recursive(...$multiArray); // 或自訂遞歸扁平
$result = mostRepeatedValues($flat, 10);

// 2. 物件陣列統計某屬性
$users = [['name'=>'A','role'=>'admin'], ['name'=>'B','role'=>'user'], ...];
$roles = array_column($users, 'role'); // ['admin','user',...]
$result = mostRepeatedValues($roles, 3);

// 3. 忽略大小寫統計字串
$ci_counts = array_count_values(array_map('strtolower', $stringArray));
arsort($ci_counts);

效能與記憶體考量

  • array_count_values 遍歷一次 O(N),建立雜湊表 O(U) (U=唯一值數)。
  • arsort 排序 O(U log U)。
  • 超大陣列 (百萬級) 且唯一值極多時,記憶體壓力大。可考慮:
    • 資料庫 GROUP BY col ORDER BY COUNT(*) DESC LIMIT N 推算。
    • 流式處理:分塊讀取、維護固定大小 Top-K 堆 (Min-Heap)。
    • 近似算法:Count-Min Sketch、HyperLogLog (PHP 有 php-hyperloglog 擴展)。

常見誤區

❌ 錯誤寫法
// 錯誤 1: array_slice 未保持鍵
$top = array_slice($counts, 0, 5); // 返回 [0=>5, 1=>3, 2=>3...] 丟失元素值!

// 錯誤 2: rsort 重置索引
rsort($counts); // 同樣丟失鍵關聯

// 錯誤 3: 型別混雜導致統計錯誤
$data = [1, "1", 1.0]; // array_count_values 視為相同鍵 '1' → 次數 3
// 實際 PHP 會轉字串鍵,1, "1", 1.0 都成 '1'

array_count_values → arsort → array_slice(..., true) 這三步組合是 PHP 陣列頻率統計的標準模式。掌握鍵值保持機制與型別轉換規則,能快速實作各類 Top-N 統計需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved