array_count_values

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

array_count_valuesBir dizideki her farklı değerlerle ilgili oluşumları sayar

Açıklama

array_count_values(array $dizi): array

array_count_values() işlevi dizi dizisindeki değerleri (bunlar tamsayı veya dizge olmalıdır) anahtar olarak ve dizi dizisinde bu değerlere rastlanma sıklığını değer olarak içeren bir dizi ile döner.

Bağımsız Değişkenler

dizi

Değerleri sayılacak dizi.

Dönen Değerler

dizi dizisindeki değerlerin anahtarları, değerlerin sayısının ise değerleri oluşturduğu bir ilişkisel dizi döner.

Hatalar/İstisnalar

string veya int türünde olmayan her eleman için bir E_WARNING oluşur.

Örnekler

Örnek 1 - array_count_values() örneği

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

Yukarıdaki örneğin çıktısı:

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

Ayrıca Bakınız

  • count() - Bir dizideki veya bir Countable nesnesindeki eleman sayısını döndürür
  • array_unique() - Diziden yinelenen değerleri siler
  • array_values() - Bir dizinin tüm değerlerini döndürür
  • count_chars() - Bir dizgedeki karakterler hakkında bilgi döndürür

add a note add a note

User Contributed Notes 8 notes

up
24
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
5
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
4
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
-2
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
-3
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
-4
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
-1
Rmr
1 year 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;
}   
?>
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
?>
To Top