IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

array_sum


Sujet :

Langage PHP

  1. #1
    Membre à l'essai Avatar de kentaro
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 17
    Points
    17
    Par défaut array_sum
    bonjour à tous
    je reviens vers vous , pour un problème avec la fonction "array_sum" l'objectif est qu'elle me donne la somme total des réponses juste , elle le fait pour "chaque question" , mais pas pour "l'ensemble des question".

    j'ai ajouter la mention "// élément pour le calcul" ce sont visiblement a ces endroit que sa cloche.
    merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    /************************************************/
    $qcm = array(
            '1'=>array (
                'libelle'=>'je vois grace à ',
                'img'=>null, 
                'choix'=>array(
                    'mes yeux.'=>true,
                    'ma tete.'=>true,
                    'mon nez.'=>false)
             ), 
    	'2'=>array (
                'libelle'=>'je sens grace à . ',
                'img'=>Null, 
                'choix'=>array(
                    'mon bras.'=>false,
                    'mon nez.'=>true,
                    'mon coude.'=>false)
            ), 
    	'3'=>array (
                'libelle'=>'high kick dans la gueule grace à',
                'img'=>Null, 
                'choix'=>array(
                    'mon pied.'=>true,
                    'mon genoux.'=>false,
                    'mon orteil.'=>false)
            )
          );
     
    /******************************************************/
     
    echo "<form action='new.php' method='post'>"; 
    // $num= '1','2','3'.
    //$question='libelle','img','choix'.
    foreach($qcm as $num=>$question){
    	echo '<h3>'.'QUESTION '.$num.'</h3>'.$question['img'].'<br />'.' -'.$question['libelle'].' :<br />';
     //$reponse='mes yeux','ma tete','mon nez' (pour la question 1)
    //$choix='true','false','false'
        foreach($question['choix'] as $reponse=>$choix){
            echo '<input type="checkbox" name="reponse_box['.$num.'][]"  value="'.$reponse.'">'.$reponse.'<br />';
        }
        echo '<p />'; 
    } 
    echo'<input type="RESET" value="Effacer" />';
    echo'<input type="SUBMIT" name="btn_valid" value="Valider" />';
    echo'</form>';
    /***********************************************************/
    if(isset($_POST['reponse_box'])){
        print_r ($_POST['reponse_box']);
        foreach ($qcm as $num => $question){
            echo'<p />QUESTION '.$num.' - '.$question['libelle'].' : <br />';
            echo '--->vous avez repondu : ';
    		if(isset($_POST['reponse_box'][$num])){ 
    			$reponse = implode(",", $_POST['reponse_box'][$num]); 
    			echo $reponse;
    			$right = 0;
    			$rep = array();// élément pour le calcul
    			foreach ($_POST['reponse_box'][$num] as $answer){
    				if (!empty($question['choix'][$answer])){
    				$right++;
    				}
    		}
    			if ($right==true){
    				 echo'<br />une ou plusieurs reponses sont justes';
    			} 
    			else {
    				echo'<br />mauvaise réponse';	
    			}
    			$rep[] = count(array_filter($_POST['reponse_box'][$num]));// élément pour le calcul		
    	} 
    						else {
    							echo'<br />Aucune reponse de votre part';
    						} 
    		echo'<p />nombre de reponse juste pour cette question : ';
    		echo array_sum($rep);
        }	
    		echo'<p />****************************nombre total de reponse juste ';
    		echo array_sum($rep); // élément pour le calcul
    }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton nombre total de bonnes réponses c'est $right non ?
    Je ne vois pas a quoi sert tout le bazar que tu as ajouté après.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai Avatar de kentaro
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 17
    Points
    17
    Par défaut
    je viens d'ajouter un "echo'$right';" mais cela ne me donne que le "nombre de just" que pour une question , et non pas pour l'ensemble , idem avec "array_sum($right);"
    merci pour ton aide.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as donc déjà la solution :
    - $right est bien le nombre de bonnes réponses à chaque question donc $rep ne sert à rien.
    Le total est simplement à construire en additionnant les $right :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    if(isset($_POST['reponse_box'])){
     
    	$total = 0
     
        foreach ($qcm as $num => $question){
            echo'<p />QUESTION '.$num.' - '.$question['libelle'].' : <br />';
            echo '--->vous avez repondu : ';
     
    		if(isset($_POST['reponse_box'][$num])){
     
    			$reponse = implode(",", $_POST['reponse_box'][$num]); 
    			echo $reponse;
     
    			$rep = array();// élément pour le calcul
    			$right = 0;
     
    			foreach ($_POST['reponse_box'][$num] as $answer){
    				if (!empty($question['choix'][$answer])){
    					$right++;
    				}
    			}
     
    			if ($right > 0){
    				 echo'<br />une ou plusieurs reponses sont justes';										
    			} 
    			else {
    				echo'<br />mauvaise réponse';	
    			}
    		} 
    		else {
    			echo'<br />Aucune reponse de votre part';
    		} 
     
    		echo'<p />nombre de reponse juste pour cette question : ';
    		echo $right;
     
    		$total += $right;
        }
     
    		echo'<p />****************************nombre total de reponse juste ';
    		echo $total; 
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai Avatar de kentaro
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 17
    Points
    17
    Par défaut
    salut sabotage
    désolé de ne répondre que maintenant .
    la correction que tu m'a donné fonctionne de manière aléatoire , par exemple quand je repond juste à la 1er question , j'obtiens "6" , quand je repond juste à toute les question , j'obtiens 4 (ce qui est correcte).
    Ajouté a cela que j'ai l’erreur suivante:
    Notice: Undefined variable: right in F:\LiberKey\MyApps\UwAmp\www\Nouveau dossier\new.php on line 91

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    if(isset($_POST['reponse_box'])){
        print_r ($_POST['reponse_box']);
        foreach ($qcm as $num => $question){
            echo'<p />QUESTION '.$num.' - '.$question['libelle'].' : <br />';
            echo '--->vous avez repondu : ';
    	if(isset($_POST['reponse_box'][$num])){ 
    		$reponse = implode(",", $_POST['reponse_box'][$num]); 
    		echo $reponse; 
    		$total=0;// CALCULE NB DE POINT								
                    //$right = 0;
    		foreach ($_POST['reponse_box'][$num] as $answer){
    			if (!empty($question['choix'][$answer])){
    				$right++;
    			}
    		}															
    		if ($right>0){
    			echo'<br />une ou plusieurs reponses sont justes';	
    		} 
    		else {
    			echo'<br />mauvaise réponse';	
    		}
    	} 							
    	else {
    		echo'<br />Aucune reponse de votre part';							
    	} 
    	echo'<p />nombre de reponse juste pour cette question : ';
    	echo $right;
    	$total += $right; // CALCULE NB DE POINT	
    }	
    echo'<p />****************************nombre total de reponse juste ';
    echo $total;  // CALCULE NB DE POINT	
    }
    en ajoutant " $right = 0;" l'erreur disparait mais le comptage est faux.


    Merci pour ton aide

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    if(isset($_POST['reponse_box'])){
     
    	$total = 0;
     
        foreach ($qcm as $num => $question){
     
    		$right = 0;
     
            echo'<p />QUESTION '.$num.' - '.$question['libelle'].' : <br />';
            echo '--->vous avez repondu : ';
     
    		if(isset($_POST['reponse_box'][$num])){
     
    			$reponse = implode(",", $_POST['reponse_box'][$num]); 
    			echo $reponse;
     
    			$rep = array();// élément pour le calcul
     
     
    			foreach ($_POST['reponse_box'][$num] as $answer){
    				if (!empty($question['choix'][$answer])){
    					$right++;
    				}
    			}
     
    			if ($right > 0){
    				 echo'<br />une ou plusieurs reponses sont justes';										
    			} 
    			else {
    				echo'<br />mauvaise réponse';	
    			}
    		} 
    		else {
    			echo'<br />Aucune reponse de votre part';
    		} 
     
    		echo'<p>nombre de reponse juste pour cette question : '. $right . '</p>';
     
    		$total += $right;
        }
     
    		echo'<p>****************************nombre total de reponse juste ' . $total . '</br>'; 
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai Avatar de kentaro
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 17
    Points
    17
    Par défaut
    chapeau bas , sa fonctionne nickel !

    j'aurais une derniere question sabotage , pourquoi dans le code quand je remplace:
    " if (!empty($question['choix'][$answer])){ "
    par
    "if (isset($question['choix'][$answer])){"

    la condition ne fonctionne plus , il me semblais que !empty et isset , etaient la meme chose non ?

    en tous cas merci beaucoup

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Points : 507
    Points
    507
    Par défaut
    Non.

    isset test si la variable existe.
    empty test en plus si la valeur est fausse. (null, 0, '', false ... ).

    Donc avec le ! c'est si elle est vraie.
    Marcuscircus : La seule différence entre un rêve et sa réalisation, c'est l'envie

  9. #9
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    isset($nomdevariable) = si la variable $nomdevariable existe = vrai (true)
    empty($nomdevariable) = si la variable (qui existe déjà) est vide (càd égale à null ou égale à "") = vrai (true)
    le ! inverse le resultat
    !isset($nomdevariable) = si la variable $nomdevariable n'existe pas = vrai (true)
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    @patrickbaras

    C'est pas tout à fait exact ce que tu viens de poster :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $a = null;
    $b = isset($a); // $b = FALSE bien qu'une variable $a ait été créée
    Lecture de la doc.

    Ensuite le empty() renvoie true dans beaucoup plus de cas de figure, regarde ici.

    Faut être précis sinon les apprenants ne s'en sortiront pas ^^
    Toujours retourner à la doc, toujours...

  11. #11
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Au passage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $a = !null; // $a =true, et oui l'inverse de null c'est "true"
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

Discussions similaires

  1. [PHP 5.4] Utilisation d'array_sum()
    Par hindioriental dans le forum Langage
    Réponses: 8
    Dernier message: 23/12/2014, 02h25
  2. array_sum et variable
    Par voyageurdumonde dans le forum Langage
    Réponses: 2
    Dernier message: 01/10/2010, 01h17
  3. [ODBC] Somme tableau avec array_sum
    Par nawak.seb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/12/2008, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo