Suppression de valeurs dans un tableau multidimensionnel - PHP - Programmation
Marsh Posté le 12-01-2009 à 10:15:18
je te conseille d'utiliser array_rand : http://us2.php.net/array_rand
tu récupère un tableau de clés aléatoires, genre
Code :
|
par contre, je comprends pas trop la raison du switch
Marsh Posté le 12-01-2009 à 12:57:03
Bonjour flo850,
Merci pour ton intervention rapide et ta proposition que je vais tester.
La présence de switch réside dans le fait que je sélectionne 5 éléments et ce sont ceux-ci que j'affiche et je récupère en même temps des valeurs différentes R1, r2, etc. des réponses données.
Marsh Posté le 12-01-2009 à 13:26:08
Pour flo850,
Même si ta proposition venait à fonctionner (chose que je n'ai pas eu le temps de vérifier), elle ne permet pas, sauf erreur de ma part, de supprimer certains éléments comme je le recherche.
Marsh Posté le 12-01-2009 à 22:38:07
avec le tirage aléatoire, tu aura chaque clé une seule et unique fois , donc, si je comprends bine le problème, tu n'aura plus besoin de unset , et tu gardes en session la liste de toutes tes données
et dans ton formulaire, tu passe juste le numéro de la question avec la réponse de l'utilisateur
Code :
|
si j'ai bien compris le problème
EDIT : en fait, j'ai mal compris
il te suffit , dans ta table de traitement des réponse, d'effacer avec unset , les question deja répondue
par contre, il faut que tfasse gaffe a ne pas reremplir le tableau a chaque fois
Marsh Posté le 13-01-2009 à 18:06:35
Bonjour flo850,
Merci pour ta deuxième contribution.
1°) Ton code semble ne plus afficher les noms des éléments, ni leur numéro atomique car on obtient :
Quelle est la structure électronique de l'élément ( électrons) ?
Quelle est la structure électronique de l'élément ( électrons) ?
etc.
au lieu de :
Quelle est la structure électronique de l'élément XXX ( BBB électrons) ?
Quelle est la structure électronique de l'élément YYY ( ZZZ électrons) ?
2°) Je cherche en effectivement à utiliser la fonction UNSET mais n'arrive pas à la mettre en oeuvre. Je crois qu'il s'agit de quelque chose comme unset ($_SESSION['matrice']) mais ne trouve pas à coder de sorte que cela fonctionne.
Peux-tu m'aider de nouveau ?
Merci encore
tete278
Marsh Posté le 13-01-2009 à 18:15:36
2 :
bah RTFM pour unset : http://fr.php.net/unset
D'ailleurs je t'avais donné la solution dans mon post
Il "supprime" une variable fournie en paramètre :
Code :
|
Marsh Posté le 15-01-2009 à 08:11:54
Bonjour,
Pardon pour le délai mais j'ai du m'absenter sans connexion au net.
En adaptant les propositions de flo850 et luc@s, j'utilise maintenant le code suivant :
// Extrait du code °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
$_SESSION['matrice']=$matrice;
$idQuestions= array_rand($_SESSION['matrice'] , $Par);
echo '<form action='."membreSuite.php".' method='."post".'><ul class='."questions".'><ul>';
$cpt = 0 ;
for ($cpt = 0 ; $cpt < sizeof($idQuestions) ;$cpt ++)
{
$key = $idQuestions[$cpt];
$element = $_SESSION['matrice'][$key];
echo '<input type="hidden" name="questions[]" value="'.$key.'">';
echo '<li> Quelle est la structure électronique de l\'élément '.$_SESSION['matrice'][$key][0].' ('.$_SESSION['matrice'][$key][1]. ' électrons) ? '.'<input type="text" size="30" name="r['.$cpt.']" /></li>';
$question['.$cpt.'] = $_SESSION['matrice'][$key][0];
$electrons['.$cpt.'] = $_SESSION['matrice'][$key][1];
$reponse['.$cpt.'] = $_SESSION['matrice'][$key][3];
$attendue['.$cpt.'] = $_SESSION['matrice'][$key][2];
unset ($_SESSION['matrice'][$key]); }
?>
<input type="hidden" name="question1" value="<?php echo $question1; ?>">
<input type="hidden" name="electrons1" value="<?php echo $electrons1; ?>">
<input type="hidden" name="reponse1" value="<?php echo $reponse1; ?>">
<input type="hidden" name="attendue1" value="<?php echo $attendue1; ?>">
etc.
// Fin de l'extrait °°°°°°°°°°°°°°°°°°°°°°°°°°°
Mon code est allégé par rapport au précédent et fonctionne mais certaines lignes ne s'affichent que de façon partielle, comme par exemple ici ou la 2ème ligne est anormale.
Quelle est la structure électronique de l'élément Chlore (17 électrons) ?
Quelle est la structure électronique de l'élément a (f électrons) ?
Quelle est la structure électronique de l'élément Phosphore (15 électrons) ?
Une âme charitable saurait-elle pourquoi ?
Cordialement,
tete278
Marsh Posté le 16-01-2009 à 12:20:40
Bonjour à tous,
J'ajoute que ce problème n'arrive pas en l'absence de unset ($_SESSION['matrice'][$key]);
Son origine réside sans doute dans son utilisation mais je ne vois pas où se trouve l'erreur.
Cordialement,
tete278
Marsh Posté le 12-01-2009 à 08:45:19
Bonjour à tous,
Je cherche à créer un texte à trous à partir des fichiers SUJET.php et CORRECTION.php
Dans SUJET.php, je réalise un tirage au sort de valeurs issues d'un tableau multidimensionnel, affiche ces valeurs (avec les trous), que j'envoie ensuite à CORRECTION.php
Mon problème est le suivant : A chaque nouveau passage dans SUJET.php, je souhaite supprimer du tableau les valeurs déjà tirées au sort afin de ne pas les proposer 2 fois; je crois comprendre qu'il faut que j'utilise la fonction UNSET($_SESSION['matrice']); mais n'arrive pas à la mettre en oeuvre.
Voici un extrait de SUJET.php :
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// Déclaration de la matrice (tableau multidimensionnel)
$matrice = array('element','electrons','reponse','affichage');
$matrice[]=array('Hydrogène','1','(K)1','(K)<sup>1</sup>');
$matrice[]=array('Hélium','2','(K)2','(K)<sup>2</sup>');
etc.....
// Je passe $matrice en session afin de la conserver
$_SESSION['matrice']=$matrice;
// Premier passage donc il faut trier
shuffle($_SESSION['matrice']);
// Affichage des textes à trous :
$i=0;
for ($numero=0;$numero<$Par;$numero++)
{
$i++;
switch ($i)
{
case "1":
echo '<img border="0" src="../../puce-claire.gif" width="8" height="8"> Quelle est la structure électronique de l\'élément '.$_SESSION['matrice'][$numero][0].' ('.$_SESSION['matrice'][$numero][1]. ' électrons) ? '.'<input type="text" size="30" name="r1" id="r1" class="champ" />';
$question1 = $_SESSION['matrice'][$numero][0];
$electrons1 = $_SESSION['matrice'][$numero][1];
$reponse1 = $_SESSION['matrice'][$numero][2];
$attendue1 = $_SESSION['matrice'][$numero][3];
break;
case "2":
etc.
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Je pense donc supprimer du tableau les éléments qui ont été tirés au sort dès qu'ils sont affichés mais suis bloqué sur cette fonction UNSET($_SESSION['matrice']) Enfin sans doute quelque chose d'approchant.
Quelqu'un aurait-il l'amabilité de m'aider ?
Merci d'avance.
tete278