web-dev-qa-db-fra.com

PHP - compter des valeurs de tableau spécifiques

Comment puis-je compter le nombre d'éléments dans un tableau avec une valeur égale à une constante? Exemple,

$myArray = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben");

comment puis-je savoir directement combien de "Ben" est à l'intérieur?

36
Ivo San
$array = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben");
$counts = array_count_values($array);
echo $counts['Ben'];
89
Rajat Singhal

Vous pouvez le faire avec array_keys et count .

$array = array("blue", "red", "green", "blue", "blue");
echo count(array_keys($array, "blue"));

Sortie:

3
11
Oliver A.

Utilisez la fonction array_count_values ​​ .

$ countValues ​​= array_count_values ​​($ myArray);

echo $countValues["Ben"];

6
Rikesh

Utilisez la fonction array_count_values(). Vérifiez ce lien http://php.net/manual/en/function.array-count-values.php

5
swapnesh

essayez la fonction array_count_values ​​()

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

sortie:

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

http://php.net/manual/en/function.array-count-values.php

2
Doc

Dans mon cas de tableau à deux dimensions, de PHP Commentaires de page officiels, j'ai trouvé l'extrait de code utile pour un tableau à deux dimensions -

<?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
?>
1
Vishal Kumar Sahu

Si vous voulez compter TOUTES les mêmes occurrences dans le tableau, voici une fonction pour les compter toutes et renvoyer les résultats sous forme de tableau multidimensionnel:

function countSame($array) {

$count = count($array);
$storeArray = array();
while ($count > 0) {
$count--;

if ($array[$count]) {
$a = $array[$count];
$counts = array_count_values($array);
$counts = $counts[$a];
$tempArray = array($a, $counts);
array_Push($storeArray, $tempArray);

$keys = array_keys($array, $a);
foreach ($keys as $k) {
unset($array[$k]);
} //end of foreach ($keys as $k)
} //end of if ($array[$count])

} //end of while ($count > 0)

return $storeArray;

} //end of function countSame($array)
0
frosty
define( 'SEARCH_STRING', 'Ben' );

$myArray = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben");

$count = count(array_filter($myArray,function($value){return SEARCH_STRING === $value;}));

echo $count, "\n";

Sortie:

3
0
Leo

array_count_values ne fonctionne que pour les entiers et les chaînes. S'il vous arrive de vouloir compter pour des valeurs flottantes/numériques (et que vous soyez attentif aux petites variations de précision ou de représentation), ceci fonctionne: 

function arrayCountValues($arr) {
  $vals = [];
  foreach ($arr as $val) { array_Push($vals,strval($val)); }
  $cnts = array_count_values($vals);
  arsort($cnts);
  return $cnts;
}

Notez que je retourne $cnts avec les clés sous forme de chaînes. Il serait facile de les reconvertir, mais j'essaie de déterminer le mode pour les valeurs, je n'ai donc besoin que de reconvertir les premières (plusieurs) valeurs.

J'ai testé une version qui a bouclé, créant un tableau de comptes plutôt que d'utiliser array_count_values, et cela s'est avéré plus efficace (peut-être de 8 à 10%)!

0
dhc

Essayez la fonction PHP array_count_values .

0
nairbv