explode et boucle foreach et for

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : explode et boucle foreach et for

par Sh4Dow » 28 nov. 2006, 14:59

re-hello ! C'est encore moi :wink:

Après avoir bien réfléchi (enfin j'espère ^^), voila au résultat que je suis arrivé :
//variable compteur
			$i = 0;
			//pour chaque éléments de $res_info
			foreach($res_info as $cle => $valeur) { 
				//texte
				echo "<b>Vous avez effectue une reservation pour le : </b><br>";
				// split des élément
 				list($date[$i], $periode[$i], $salle[$i], $groupe[$i]) = explode("|",$valeur); 
				//date
				echo "Date : ".$date[$i]."<br>";
				//periode
				echo "A la periode periode : ".$periode[$i]."<br>";
				//salle
				echo "Dans la salle : ".$salle[$i]."<br>";
				//grouoe
				echo "Avec le groupe : ".$groupe[$i]."<p>";
				//incrémentation de la variable compteur
				$i++;
			} 
Ceci me permet de récupérer chacun des mes éléments et de les rangers dans un endroit bien précis. Après, il ne me reste plus qu'à comparer les index.

Et voila comment j'affiche les infos juste pour le test :
echo "<p>";
			echo "les dates<br>";
			for ($d = 0 ; $d < count($date) ; $d++){
				echo $date[$d]."<br>";
			}
			echo "<p>";
			echo "les periodes<br>";
			for ($p = 0 ; $p < count($periode) ; $p++){
				echo $periode[$p]."<br>";
			}
			echo "<p>";
			echo "les salles<br>";
			for ($s = 0 ; $s < count($salle) ; $s++){
				echo $salle[$s]."<br>";
			}
			echo "<p>";
			echo "les groupes<br>";
			for ($g = 0 ; $g < count($groupe) ; $g++){
				echo $groupe[$g]."<br>";
			}
Je ne sais pas si c'est très politiquement correct, mais c'est ce que je voulais. Merci à tous pour l'aide, c'est vraiment très très sympa de votre part :wink:

par Ajoloca » 28 nov. 2006, 12:56

Bonjour,
Pourquoi n'utilises tu pas des tableaux associatifs au lieu de tableaux indexés?

par Sh4Dow » 28 nov. 2006, 12:42

D'accord, je comprends.

Par contre ce qui ne va plus/pas du tout, c'est que je n'arrive pas à formuler les instructions pour dire que quand c'est 0, c'est le jour, 1 la periode etc. sans l'indiquer à la main. C'est-à-dire avec un calcul.

Par exemple, j'aimerais afficher ceci :
"Vous avez effectuer une réservation au date" (récupérer depuis l'index qui contient une date)
"Dans la salle salle" (récupérer depuis l'index qui contient une salle)
...

Ca n'a encore rien à voir avec la requête, mais ça pourrait déjà m'aider à comprendre comment la construire. Je ne vois vraiment pas comment procéder (désolé si ça fait un peu boulet :oops: ).
Parce qui va être difficle (en tous cas pour moi), c'est de remettre les bonnes informations ensemble.

par Ryle » 28 nov. 2006, 12:20

edit : en faite, je me posais une autre question (et oui, le topic ne peut pas s'arrêter en si bon chemin non ? :wink: ) :
Serait-il possible de faire la même chose avec un tableau à plusieurs dimensions ? Car le problème qui va se poser ensuite sera de récupérer les valeurs correctement pour effectuer la requête.
En effet on peut considérer ceci : les index 0,1,2,3 vont ensemble, puis 4,5,6,7 etc.

Donc la réservation r1 pour la date 0 à la période 1 dans la salle 2 avec le groupe 3
Puis réservation r2 pour la date 4 à la période 5 etc...

Est-ce que cela serait correcte ou suis-je à côté de la plaque ?
:roll:
Ca peut effectivement se faire, genre avec une division et un modulo, mais c'est pas forcément ce qu'il y a de mieux pour la compréhension ou la maintenance...

C'est peut être un peu plus lourd de bien séparer les choses et les nommer explicitement, mais au moins dans 6 mois quand tu reviendras sur ton code pour modifier un p'tit détail bête, tu apprécieras de ne pas avoir à passer 2 jours à essayer de comprendre comment tout cela fonctionnait ;)

par jojolapine » 28 nov. 2006, 11:49

nono requête préparée dans le genre: http://fr.php.net/manual/fr/function.pdo-prepare.php

par Sh4Dow » 28 nov. 2006, 11:43

Oui, j'ai aussi fini par adopter la solution de Ryle. :D

Requêtes préparées ? Dans le genre Dreamweaver ? Si c'est ça, alors non ^^ J'ai déjà donné. Et la requête est trop complexe pour être générée automatiquement par Dreamweaver. Pour moi, la meilleure solution sera toujours de les faire à la main.

edit : en faite, je me posais une autre question (et oui, le topic ne peut pas s'arrêter en si bon chemin non ? :wink: ) :
Serait-il possible de faire la même chose avec un tableau à plusieurs dimensions ? Car le problème qui va se poser ensuite sera de récupérer les valeurs correctement pour effectuer la requête.
En effet on peut considérer ceci : les index 0,1,2,3 vont ensemble, puis 4,5,6,7 etc.

Donc la réservation r1 pour la date 0 à la période 1 dans la salle 2 avec le groupe 3
Puis réservation r2 pour la date 4 à la période 5 etc...

Est-ce que cela serait correcte ou suis-je à côté de la plaque ?
:roll:

par jojolapine » 28 nov. 2006, 11:36

\:D/ This answer is User approved
[-( Rabat joie Ryle
Non plus sèrieusement Sh4dow, c'est vrai que c'est plus simple, sauf, si tu utilises des requêtes préparées ?

par Ryle » 28 nov. 2006, 11:35

Personnellement ça me semble plus simple de traiter directement tes données quand tu les as que de les stocker dans un tableau que tu vas devoir reparcourir ensuite. Pourquoi ne pas simplement imbriquer ton for() dans ton foreach() ? :)
foreach($res_info as $cle => $valeur) { 
  $reservation = explode("|",$valeur); // split des élément

  // pour chacun des éléments du tableau $reservation
  for ($z=0 ; $z<count($reservation) ; $z++){ 
    // affichage, insertion en base ou ce que tu veux :)
    echo $reservation[$z] . "<br>"; 
  }
}

par Sh4Dow » 28 nov. 2006, 11:32

Oui merci beaucoup ! C'est bien le résultat souhaité. :D

Maintenant, ne reste plus qu'à construire la requête :wink:

par jojolapine » 28 nov. 2006, 11:27

tu pourrais faire ceci:
tu initialise au tout début ton tableau $reservation, comme ceci:
$reservation = array();
et dans ta boucle, tu ceci:
foreach($res_info as $cle => $valeur) {
                    echo $cle.' : '.$valeur.'<br>';
                    /*on récupère chaque éléments de $valeur de manière séparée (4 au total)
                    avec la fonction explode. Le delimiter est "|" */
                    array_push($reservation ,explode("|",$valeur));
                } 
normalement un print_r de $reservation devrait te donner:

Code : Tout sélectionner

array( [0]=>array( [0]=>'2006-11-114? [1]=>'5', [2]=>'10', [3]=>'2' ) [1]=>etc )

par Sh4Dow » 28 nov. 2006, 11:22

Oui effectivement. Mais en faite, je fais un explode() dans le but de récupéré chaque éléments de la valeur de $res_info à l'index courant. Ceci dans le but d'effectuer une requête par la suite (ajout de valeur dans la base de données).

Et vu que l'utilisateur a ici la possiblité d'effecteur une ou plusieurs réservations d'un seul coup, c'est cela qui me pose problème.

edit : exactement ce que je veux faire jojolapine :wink:

par jojolapine » 28 nov. 2006, 11:20

à non, la il y a une différence entre le tableau $res_info et le tableau ^reservation...
un exemple de print_r que cela pourrait générer...
$res_info

Code : Tout sélectionner

array( [0]=>'2006-11-12|5|10|2', [1]=>'2006-12-11|8|10|2', ... )
et le tableau $resrevation:

Code : Tout sélectionner

array( [0]=>'2006-11-12', [1]=>'5', [2]=>'10', [3]=>'2' )

re

par Frantz » 28 nov. 2006, 11:15

Tu te compliques la vie, la boucle foreach qui tourne sur
ton tableau res_info fait exactement la même chose que ce que
tu veux faire plus loin.

Je m'explique : le contenu du tableau que t'essais de créer
est le même que celui dénommé $res_info.

Tu peux donc faire, si ça t'amuses :
$nb=count($res_info); 
for ($z=0 ; $z<$nb ; $z++){ 
                echo $res_info[$z];  
                echo "<br>"; 
             }
Voila, j'espère avoir été clair ??

@+ et bon courage

par Sh4Dow » 28 nov. 2006, 11:12

Okay ! Merci. Je comprends mieux maintenant !
Merci pour les réponses et la rapidité :wink:

par Ryle » 28 nov. 2006, 11:07

Concernant ton tableau, c'est effectivement parce que s'il ne contient que 4 éléménts d'après ce que tu dis, tu vas difficilement pouvoir interroger les index de 0 à 8 ;)

La méthode de Frantz est bien pour cela, car elle t'assure de ne pas dépasser la longueur du tableau :) Image
Et pourquoi l'affichage des mes élèments ne commence seulement qu'à partir de la dernière valeur récupérée ?
Tout simplement parce que tu fais ton affichage en dehors du foreach() et qu'à chaque itération la valeur de $reservation est écrasée par la nouvelle. Du coup une fois sorti de la boucle, elle n'a plus pour valeur que la dernière :)

Edit : pour une fois que je peux coller mon joli maccaron ! ;)