Compter le nombre de valeurs différentes d’un tableau
Il est très facile de connaître le nombre d'éléments que contient un tableau. Il suffit d'utiliser la fonction count.
$var = ['1', '2', 3, 'a', 2, 3];
$size = count($var);
// $size => 6Mais comment faites-vous pour compter le nombre d'éléments différents d'un tableau ?
array_unique :$var = ['1', '2', 3, 'a', 2, 3];
$uniqueValue = array_unique($var);
$size = count($uniqueValue);
// $size => 44 ? pourquoi pas 5 ? Car pour faire la comparaison, array_unique converti les éléments en string. Donc finalement, il compare ['1', '2', '3', 'a', '2', '3'].
Et attention si vous avez des boolean ou des valeurs null dans votre tableau.
$var = [1, true, 0, false, null];
$uniqueValue = array_unique($var);
$size = count($uniqueValue);
// $size => 3true et false sont convertis respectivement en '1' et '0', null converti en chaîne vide ''.
array_count_values : cette méthode permet de compter le nombre occurrences de chaque valeur dans un tableau$var = ['1', '2', 3, 'a', 2, 3];
var_export(array_count_values($var));
/*
array (
1 => 1,
2 => 2,
3 => 2,
"a" => 1,
)
*/On voit ici que la méthode convertie les chaînes de type entier en entier.
$var = [1, '2', 3, 4, 2, 3];
$numberByUniqueValue = array_count_values($var);
$size = count($numberByUniqueValue);
// $size => 4Et donc on voit qu'avec cette méthode, on a le même résultat...
$var = [1, true, 0, false, null];
$numberByUniqueValue = array_count_values($var);
$size = count($numberByUniqueValue);
// $size => 2Le résultat n'est pas le même qu'avec array_unique car cette méthode ne peut compter que les chaînes et les entiers. PHP nous remonte des warning pour nous informer qu'il ignore les valeurs.
Warning: array_count_values(): Can only count string and integer values, entry skipped in
Warning: array_count_values(): Can only count string and integer values, entry skipped in
Warning: array_count_values(): Can only count string and integer values, entry skipped inDonc rien de très satisfaisant. Après je prends ici des cas un peu extrêmes, j'espère pour vous que vos tableaux ne sont pas des mélanges de type comme ci-dessus.
$var = [1, true, 0, false, null, '', '1', 2, 3, 3];
$uniqueValues = [];
foreach ($var as $item) {
if (false === in_array($item, $uniqueValues, true)) {
$uniqueValues[] = $item;
}
}
$size = count($uniqueValues);Ce qui fait toute la différence ici est le 3ᵉ paramètre true à la fonction in_array qui compare le type en plus de la valeur.
J’ai préparé un guide pratique avec une dizaine de conseils essentiels pour poser de bonnes bases.
👉 Bonnes pratiques, astuces spécifiques à PHP, exemples concrets… tout y est pour prendre de suite les bonnes habitudes.