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

PHP array_count_values() 統計陣列值出現次數:建立頻率分布表

     編輯:PHP 相關知識

函式簽名

array_count_values(array $array): array
  • 回傳**新陣列**:鍵為原陣列**值**,值為**出現次數**
  • **僅支援 scalar 值** (int/float/string),非 scalar 會拋出 `Warning` 並忽略
  • 大小寫敏感 (`'A' !== 'a'`)

基本範例

<?php
$arr = ['a' => 'red', 'b' => 'green', 'c' => 'red', 'd' => 'blue', 'e' => 'red'];
print_r(array_count_values($arr));
/*
Array
(
    [red] => 3
    [green] => 1
    [blue] => 1
)
*/

實戰應用

1. 文字詞頻統計


$text = "PHP is great. PHP is fast. PHP is flexible.";
$words = array_filter(
    preg_split('/\s+/', strtolower($text)),
    fn($w) => $w !== ''
);
$freq = array_count_values($words);
arsort($freq); // 按出現次數降序
print_r($freq);
/*
[php=>3, is=>3, great=>1, fast=>1, flexible=>1]
*/

2. 投票/選項計數


$votes = ['A', 'B', 'A', 'C', 'A', 'B', 'B', 'A'];
$result = array_count_values($votes);
// ['A'=>4, 'B'=>3, 'C'=>1]
$winner = array_keys($result, max($result))[0]; // 'A'

3. 陣列去重 + 保留計數 (壓縮儲存)


$large = [1,2,2,3,3,3,4,4,4,4]; // 100 萬筆
$compressed = array_count_values($large);
// [1=>1, 2=>2, 3=>3, 4=>4]  極大幅減少記憶體
// 還原: array_map(fn($v,$c)=>array_fill(0,$c,$v), ...$compressed)

4. 多維陣列特定欄位統計


$users = [
    ['role'=>'admin'], ['role'=>'user'], ['role'=>'editor'],
    ['role'=>'user'], ['role'=>'admin'],
];
$roles = array_column($users, 'role');
$dist = array_count_values($roles);
// ['admin'=>2, 'user'=>2, 'editor'=>1]

注意事項

  • **非 scalar 值會被忽略並警告**:預先 `array_filter($arr, 'is_scalar')`。
  • **大小寫敏感**:需統一大小寫請先 `array_map('strtolower', $arr)`。
  • **浮點數精度**:`0.1 + 0.2` 可能產生 `0.30000000000000004` 導致分桶錯誤,建議先 `round($v, 2)` 或轉字串。

效能

  • 內部雜湊表統計,**O(n)** 線性時間,百萬級陣列約 0.02 秒。
  • 記憶體峰值約原陣列 1.5x (建立計數表)。

原文摘自 zuodefeng 筆記

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