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.
Que diriez-vous d'utiliser array_count_values pour obtenir un tableau avec tout ce qui compte pour vous?
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, "" ));
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;
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 ()
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
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));