2024 年 PHP Conference Japan

array_count_values

(PHP 4, PHP 5, PHP 7, PHP 8)

array_count_values計算陣列中每個不同值的出現次數

說明

array_count_values(陣列 $array): 陣列

array_count_values() 會回傳一個陣列,使用 array 的值(必須是 整數字串)作為鍵,並將它們在 array 中出現的頻率作為值。

參數

array

要計數值的陣列

回傳值

回傳一個關聯式陣列,以 array 中的值作為鍵,它們的計數作為值。

錯誤/例外

對於每個不是 字串整數 的元素,都會拋出 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
)

參見

新增註釋

使用者貢獻的註釋 3 則註釋

sergolucky96 at gmail dot com
7 年前
在多維陣列中查找具有特定值的項目數量的簡單方法

<?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]; // 輸出:2
?>
rabies dot dostojevski at gmail dot com
17 年前
我找不到一個可以忽略大小寫來計算值的函式,所以我寫了一個簡單但可能不太精緻的解決方案

<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); // 一般比對
$ar = array_icount_values($ar); // 忽略大小寫比對
print_r($ar2);
print_r($ar);
?></pre>

這會印出

陣列
(
[J. Karjalainen] => 3
[60] => 2
[j. karjalainen] => 1
[Fastway] => 2
[FASTWAY] => 1
[fastway] => 1
[YUP] => 1
)
陣列
(
[J. Karjalainen] => 4
[60] => 2
[Fastway] => 4
[YUP] => 1
)

我不知道它的效率如何,但它似乎可以運作。在我的其中一個腳本中需要這個函式,所以想分享它。
szczepan.krolgmail.c0m
14 年前
這是一個適用於一個或多個陣列的版本,其中包含類似的值。
使用 $lower=true/false 來忽略/設定區分大小寫。

<?php

$ar1
[] = array("red","green","yellow","blue");
$ar1[] = array("green","yellow","brown","red","white","yellow");
$ar1[] = array("red","green","brown","blue","black","yellow");
// 可使用單個或多個陣列

$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;
}
/*
將印出:
陣列
(
[red] => 3
[green] => 3
[yellow] => 4
[blue] => 2
[brown] => 2
[white] => 1
[black] => 1
)
*/
?>
To Top