PHP 8.4.0 RC4 available for testing

array_count_values

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

array_count_valuesZählt die Vorkommen jedes einzelnen Wertes in einem Array

Beschreibung

array_count_values(array $array): array

array_count_values() gibt ein Array zurück, in dem die Werte des Arrays array (die vom Typ Integer oder String sein müssen) als Schlüssel und die Häufigkeit ihres Auftretens als Werte angegeben sind.

Parameter-Liste

array

Das Array mit den zu zählenden Werten

Rückgabewerte

Gibt ein assoziatives Array mit den Werten aus array als Schlüsseln und der Anzahl als Werten zurück.

Fehler/Exceptions

Erzeugt ein E_WARNING für jedes Element, welches kein string oder int ist.

Beispiele

Beispiel #1 array_count_values()-Beispiel

<?php
$array
= array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)

Siehe auch

  • count() - Zählt alle Elemente eines Arrays oder eines Countable-Objekts
  • array_unique() - Entfernt doppelte Werte aus einem Array
  • array_values() - Liefert alle Werte eines Arrays
  • count_chars() - Gibt Informationen über die in einem String enthaltenen Zeichen zurück

add a note

User Contributed Notes 3 notes

up
27
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
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
6
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
)
*/
?>
To Top