Compter nombre valeur positive dans un tableau

fury_fatal
Invité n'ayant pas de compte PHPfrance

16 janv. 2020, 13:58

Bonjour,
J'aimerais compter le nombre de valeur positive dans un tableau.
J'ai fait ceci :

Code : Tout sélectionner

$infos = [ "PV" => 10, "Attaque" => 0, "Défense" => 0, "Soin" => 10 ]; $nb_val_positive = 0; foreach ($infos as $info) { if ($info > 0) { $nb_val_positive++; } } echo $nb_val_positive: // Affiche: 2

Existe qu'il existe une fonction native permettant de le faire ?

Avatar du membre
Mammouth du PHP | 1048 Messages

16 janv. 2020, 14:45

Salut, c'est pas une fonction exprès pour mais si l'idée c'est de ne pas compter toutes les valeurs à 0 :
echo count(array_diff(array_values($infos), [ 0 ]));
PS : après c'est vraiment le trip de faire ça en une ligne, ta boucle est très bien. Et à moins que quelqu'un nous sorte LA fonction qui permettrait de le faire, tu peux faire ta propre fonction à partir de ton code ou du mien. Mais ça n'a pas d'intérêt si tu utilises ce code à un seul endroit.
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Mammouth du PHP | 1614 Messages

16 janv. 2020, 16:07

la fonction de Saian comptera aussi les valeurs négative.

je pense que tu as la meilleure solution
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Avatar du membre
Mammouth du PHP | 1048 Messages

16 janv. 2020, 16:56

Moué mais d'après le mini jeu de données il ne semble pas y avoir de valeurs négatives, seulement des valeurs égales à 0 ou positives.

Et je voulais justement proposer une autre alternative :
echo count(array_filter($infos, function ($value) { return $value > 0; }));
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

fury_fatal
Invité n'ayant pas de compte PHPfrance

16 janv. 2020, 20:41

Merci pour la méthode avec array_filter. Je n'avais pas compris comment utiliser ce filtre.