array_count_values(array $array): array
<?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
)
*/
$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]
*/
$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'
$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)
$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]
原文摘自 zuodefeng 筆記