array_count_values
(PHP 4, PHP 5, PHP 7, PHP 8)
array_count_values — 统计数组中所有的值
说明
array_count_values(array
$array
): array
array_count_values() 返回一个数组:
数组的键是 array
里单元的值;
数组的值是 array
单元的值出现的次数。
参数
-
array
-
统计这个数组的值
返回值
返回一个关联数组,用 array
数组中的值作为键名,该值在数组中出现的次数作为值。
错误/异常
对数组里面的每个不是 string 或 int 类型的元素抛出一个警告错误(E_WARNING
)。
范例
示例 #1 array_count_values() 例子
<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>
以上例程会输出:
Array ( [1] => 2 [hello] => 2 [world] => 1 )
参见
- count() - 统计数组、Countable 对象中所有元素的数量
- array_unique() - 移除数组中重复的值
- array_values() - 返回数组中所有的值
- count_chars() - 返回字符串所用字符的信息

User Contributed Notes 6 notes
sergolucky96 at gmail dot com ¶
4 years ago
Simple way to find number of items with specific values in multidimensional array:
<?php
$list = [
['id' => 1, 'userId' => 5],
['id' => 2, 'userId' => 5],
['id' => 3, 'userId' => 6],
];
$userId = 5;
echo array_count_values(array_column($list, 'userId'))[$userId]; // outputs: 2
?>
szczepan.krolgmail.c0m ¶
12 years ago
Here is a Version with one or more arrays, which have similar values in it:
Use $lower=true/false to ignore/set case Sensitiv.
<?php
$ar1[] = array("red","green","yellow","blue");
$ar1[] = array("green","yellow","brown","red","white","yellow");
$ar1[] = array("red","green","brown","blue","black","yellow");
#$ar1= array("red","green","brown","blue","black","red","green"); // Possible with one or multiple Array
$res = array_icount_values ($ar1);
print_r($res);
function array_icount_values($arr,$lower=true) {
$arr2=array();
if(!is_array($arr['0'])){$arr=array($arr);}
foreach($arr as $k=> $v){
foreach($v as $v2){
if($lower==true) {$v2=strtolower($v2);}
if(!isset($arr2[$v2])){
$arr2[$v2]=1;
}else{
$arr2[$v2]++;
}
}
}
return $arr2;
}
/*
Will print:
Array
(
[red] => 3
[green] => 3
[yellow] => 4
[blue] => 2
[brown] => 2
[white] => 1
[black] => 1
)
*/
?>
anvil_sa at NOSPAMNO dot hotmail dot com ¶
2 years ago
Based on sergolucky96 suggestion
Simple way to find number of items with specific *boolean* values in multidimensional array:
<?php
$list = [
['id' => 1, 'result' => true],
['id' => 2, 'result' => true],
['id' => 3, 'result' => false],
];
$result = true;
echo array_count_values(array_map(function($v) {return $v?'true':'false';},array_column($list, 'result')))[$result]
// outputs: 2
?>
Dominic Vonk ¶
8 years ago
The case-insensitive version:
<?php
function array_count_values_ci($array) {
$newArray = array();
foreach ($array as $values) {
if (!array_key_exists(strtolower($values), $newArray)) {
$newArray[strtolower($values)] = 0;
}
$newArray[strtolower($values)] += 1;
}
return $newArray;
}
?>
rabies dot dostojevski at gmail dot com ¶
15 years ago
I couldn't find a function for counting the values with case-insensitive matching, so I wrote a quick and dirty solution myself:
<pre><?php
function array_icount_values($array) {
$ret_array = array();
foreach($array as $value) {
foreach($ret_array as $key2 => $value2) {
if(strtolower($key2) == strtolower($value)) {
$ret_array[$key2]++;
continue 2;
}
}
$ret_array[$value] = 1;
}
return $ret_array;
}
$ar = array('J. Karjalainen', 'J. Karjalainen', 60, '60', 'J. Karjalainen', 'j. karjalainen', 'Fastway', 'FASTWAY', 'Fastway', 'fastway', 'YUP');
$ar2 = array_count_values($ar); // Normal matching
$ar = array_icount_values($ar); // Case-insensitive matching
print_r($ar2);
print_r($ar);
?></pre>
This prints:
Array
(
[J. Karjalainen] => 3
[60] => 2
[j. karjalainen] => 1
[Fastway] => 2
[FASTWAY] => 1
[fastway] => 1
[YUP] => 1
)
Array
(
[J. Karjalainen] => 4
[60] => 2
[Fastway] => 4
[YUP] => 1
)
I don't know how efficient it is, but it seems to work. Needed this function in one of my scripts and thought I would share it.
pmarcIatIgeneticsImedIharvardIedu ¶
19 years ago
array_count_values function does not work on multidimentional arrays.
If $score[][] is a bidimentional array, the command
"array_count_values ($score)" return the error message "Warning: Can only count STRING and INTEGER values!".
备份地址:http://www.lvesu.com/blog/php/function.array-count-values.php