CascadiaPHP 2024

array_count_values

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

array_count_valuesConta tutti i valori di un array

Descrizione

array_count_values(array $array): array

array_count_values() restituisce un array usando i valori di array come chiavi e la loro frequenza in array come valori.

Elenco dei parametri

array

L'array di valori da contare

Valori restituiti

Restituisce un array associativo di valori da array come chiavi ed il loro conteggio come valore.

Errori/Eccezioni

Lancia un E_WARNING per ogni elemento che non è string o int.

Esempi

Example #1 Esempio di array_count_values()

<?php
$array
= array(1, "ciao", 1, "mondo", "ciao");
print_r(array_count_values($array));
?>

Il precedente esempio visualizzerà:

Array
(
    [1] => 2
    [ciao] => 2
    [mondo] => 1
)

Vedere anche:

  • count() - Conta gli elementi in una variabile, o le proprietà in un oggetto
  • array_unique() - Rimuove i valori duplicati di un array
  • array_values() - Restituisce tutti i valori di un array
  • count_chars() - Restituisce informazioni sui caratteri usati in una stringa

add a note

User Contributed Notes 9 notes

up
28
sergolucky96 at gmail dot com
6 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
?>
up
7
szczepan.krolgmail.c0m
14 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
)
*/
?>
up
7
rabies dot dostojevski at gmail dot com
17 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.
up
0
lorenz at permafrost dot ch
5 days ago
The above still produces a "array to string conversion" notification.

Try instead:

[code]->select('DISTINCT '.$db->quoteName('name_group'))[code]
up
-3
pmarcIatIgeneticsImedIharvardIedu
21 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!".
up
-1
tyler at tloc dot com
1 year ago
A cleaner way to use array_count_values() to find boolean counts.

<?php

$list
= [
[
'id' => 1, 'result' => true],
[
'id' => 2, 'result' => true],
[
'id' => 3, 'result' => false],
];
$result = true;

echo
array_count_values(array_map('intval', array_column($list, 'result')))[(int)$result];
// outputs: 2
?>
up
-4
anvil_sa at NOSPAMNO dot hotmail dot com
4 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

?>
up
-7
Dominic Vonk
10 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;
}
?>
up
-2
Rmr
9 months ago
If you have a multidimensional array with unknown dimensions, you cannot use this function, use instead:

<?php
function array_count_recursive(array $arr): array {
$occurrences = [] ;
array_walk_recursive( $arr, function($value, $key) use (&$occurrences) {
@
$occurrences[$value]++;
// @ to surpress warnings "Undefined array key". In php8 you can also use
// $occurrences[$value] = ($occurrences[$value] ?? 0) + 1
});
return
$occurrences;
}
?>
To Top