web-dev-qa-db-fra.com

Compter le nombre de valeurs dans un tableau avec une valeur donnée

Disons que j'ai un tableau comme celui-ci:

$array = array('', '', 'other', '', 'other');

Comment puis-je compter le nombre avec une valeur donnée (dans l'exemple vide)?

Et le faire efficacement? (pour environ une douzaine de tableaux avec des centaines d'éléments chacun) Cet exemple arrive à expiration (plus de 30 secondes):

function without($array) {
    $counter = 0;
    for($i = 0, $e = count($array); $i < $e; $i++) {
        if(empty($array[$i])) {
            $counter += 1;
        }
    }
    return $counter;
}

Dans ce cas, le nombre d'éléments vierges est de 3.

22
Tom

Que diriez-vous d'utiliser array_count_values pour obtenir un tableau avec tout ce qui compte pour vous?

35
Cellfish

Juste une idée, vous pouvez utiliser array_keys( $myArray, "" ) en utilisant le second paramètre optionnel qui spécifie une valeur de recherche. Comptez ensuite le résultat.

$myArray = array( "","","other","","other" );
$length  = count( array_keys( $myArray, "" ));
28
Sampson

Je ne sais pas si ce serait plus rapide mais c'est quelque chose à essayer:

$counter = 0;
foreach($array as $value)
{
  if($value === '')
    $counter++;
}
echo $counter;
6
camomileCase

Vous pouvez également essayer array_reduce , avec une fonction qui ne compterait que la valeur qui vous intéresse.

function is_empty( $v, $w )
{ return empty( $w ) ? ($v + 1) : $v; }

array_reduce( $array, 'is_empty', 0 );

Certaines analyses comparatives pourraient vous dire si cela est plus rapide que array_count_values ​​()

3
Steve

Nous utilisons la fonction array_filter pour trouver le nombre de valeurs dans le tableau

$array=array('','','other','','other');
$filled_array=array_filter($array);// will return only filled values
 $count=count($filled_array);
echo $count;// returns array count
2
Bhushan Rana

Généralement pour compter les blancs seulement. Cela dépend vraiment du cas d'utilisation et de la vitesse requise. Personnellement, j'aime faire les choses sur une seule ligne.

Comme la réponse choisie, mais vous avez encore besoin d'une ligne pour extraire les données nécessaires vers une autre variable.

$r = count($x) - count(array_filter($x));
2
Darren