Bonjour,
J'ai remodeler à ma sauce.
function moyenne($tableau)
{
if (!is_array($tableau) or empty($tableau))
return FALSE;
$nb = count($tableau);
$total = 0;
foreach($tableau as $nombre)
{
if (filter_var($nombre,FILTER_VALIDATE_FLOAT) or (filter_var($nombre,FILTER_VALIDATE_INT))
$total += floatval($nombre);
else
$nb--;
}
if ($nb <= 0)
return FALSE;
else
return (array($total,$nb));
}
Alors, j'explique la fonction :
if (!is_array($tableau) or empty($tableau))
return FALSE;
Si pas tableau ou tableau vide => retourne faux
$nb = count($tableau);
$total = 0;
foreach($tableau as $nombre)
{
if (filter_var($nombre,FILTER_VALIDATE_FLOAT) or (filter_var($nombre,FILTER_VALIDATE_INT))
$total += floatval($nombre);
else
$nb--;
}
Je compte le nombre d'occurence dans le tableau avec
$nb = count($tableau);
Je boucle sur le tableau avec
foreach($tableau as $nombre) et si par
filter_var($nombre,FILTER_VALIDATE_FLOAT) or (filter_var($nombre,FILTER_VALIDATE_INT)) $nombre n'est ni un décimal, ni un nombre entier alors avec
$nb-- je retire l'occurrence du nombre total sinon j'ajoute au total la valeur formatée en nombre décimal avec
$total += floatval($nombre);
Ensuite avec
if ($nb <= 0)
return FALSE;
Si toutes les occurences sont fausse => retourne faux (car on ne peut pas diviser par zéro) sinon avec
return (array($total,$nb)); je retourne un tableau avec le total et le nombre d'occurences.
Ce mode de retour te permet de vérifier le total et le nombre d'occurence (pour vérifier la fonction.
Aussi pour l'utiliser tu dois lister les deux valeurs retournées pas la fonction et en même temps si aucune erreur survient :
if ($tab = moyenne( array($CFG1FR, $CFG1MA, $CFG2FR, $CFG2MA, $CFG3FR, $CFG3MA , $CFG1ORAL) ))
{
list ($total,$nb) = $tab;
$moyenne = $total/$nb;
echo "Total = ".$total." Nombre = ".$nb." Moyenne = ".$moyenne;
}
else
echo 'erreur dans la fonction "moyenne"';
list() est une pseudo fonction qui prends les "colonnes" d'un tableau et les mets dans la variable listée. Comme ici list ($total,$nb) = $tab; et que normallemnt $tab = array($total,$nb); alors $total = $total (mais de la fonction) et $nb = $nb (mais de la fonction)