Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/10/2011, 14h32   #1
Invité de passage
 
Inscription : mars 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 7
Points : 0
Points : 0
Par défaut Imbrication de foreach

Bonjour,

je développe en PHP pour le CMS Drupal. Je cherche à afficher le résultat de deux requêtes faites à la base de données. Les deux array de résultat des requêtes sont $result_channel et $result_channel_cost.

voici mes deux foreach qui devraient me permettre l'affichage :


Code :
1
2
3
4
5
6
7
8
9
10
11
foreach( $result_channel as $line)	{ 
	print($line->idchannel); 
	print($line->name); 
 
	foreach( $result_channel_cost as $line_c) {
		if($line->idchannel == $line_c->idchannel) { 
			print($line_c->default_value); 
		} 
 
	}
}
Le problème est que le second foreach ne s'effectue qu'une fois et ne s'effectue pas pour chaque $line du premier foreach. (J'espère être claire...) Quelqu'un verrait mon erreur ? ^^ Merci.
rps8484a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 16h02   #2
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

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

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
Citation:
Envoyé par rps8484a Voir le message
Bonjour,

Le problème est que le second foreach ne s'effectue qu'une fois et ne s'effectue pas pour chaque $line du premier foreach. (J'espère être claire...) Quelqu'un verrait mon erreur ? ^^ Merci.
Bonjour,
ça serait peut-être plus facile avec des exemples des résultats de tes requêtes... mais c'est pas ton if qui fait qu'il ne s'exécute qu'1 fois (que quand ton égalité est vraie ?)
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 18h43   #3
Invité de passage
 
Inscription : mars 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 7
Points : 0
Points : 0
Merci de me répondre !

Code :
1
2
3
4
5
6
7
8
9
$select_channel = db_select('di_channel', 'c')
				->fields('c', array('idchannel','name','description','url','simple','validate','idchannel_parent','idsort_of_channel'));
 
$result_channel = $select_channel->execute();
 
$select_channel_cost = db_select('di_channel_sort_of_cost', 's')
				->fields('s', array('idsort_of_cost','idchannel','default_value'));
 
$result_channel_cost = $select_channel_cost->execute();
Voici mes requêtes, en traduction elles sont faites sur deux tables :
- di_channel : #idchannel, name, description, url, simple, validate, #idchannel_parent, #idsort_of_channel

- di_channel_sort_of_cost : #idsort_of_cost,# idchannel, default_value'


Mon but est donc d'afficher le contenu de la table "di_channel", puis pour chaque "channel" d'afficher les "default_value" qui lui sont associé dans la table "di_channel_sort_of_cost".

Le if est donc uniquement la pour trier les "default_value" et l'enlever ne change rien, j'ai vérifié. Ca m'affiche juste les coûts des autres "channel" à la suite.

Au niveau du résultat sous forme de tableau ca donne ca :



Chaque channel apparait donc dans la première colonne (le premier foreach) et les autres colonnes sont les couts associés à chaque channel (deuxième foreach)... et donc seule la première ligne en a. Le foreach ne boucle plus ensuite. Suis-je plus claire ?

J'en viens à me demander si à la fin d'un foreach mes tableaux sont vides... mais je trouve cela étrange.
rps8484a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 18h54   #4
Invité de passage
 
Inscription : mars 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 7
Points : 0
Points : 0


Donc sans le "if", j'obtiens cela.
rps8484a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 09h55   #5
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

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

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
Humph...
je dois pas être réveillé ce matin, parce que j'ai un peu de mal à suivre...
Une remarque peut-être inutile, mais qui devrait m'aider à suivre:
tu veux afficher: idchannel, name et default_value.
Pourquoi tu passes pas par une jointure ?
(et d'ailleurs pourquoi tu select tous les champs si tu n'en utilises que 3 ?)
bon, ceci dit, ça ne résout pas ton problème...

un select du style :
Code :
1
2
3
4
select c.idchannel, name, default value
from di_channel as c
join di_channel_sort_of_cost as s
    on c.idchannel = s.idchannel
te donne pas directement ce que tu veux sans voir besoin du 2ème foreach ?

(si ma remarque est hors sujet, désolé d'avance...)
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 11h16   #6
Invité de passage
 
Inscription : mars 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 7
Points : 0
Points : 0
(Désolé de répondre un peu tard)

J'ai tenté la jointure, cependant le résultat que j'obtenais dans mon cas, je n'arrivais pas à le mettre en forme ensuite (ce n'était pas vraiment ce que je voulais).... Donc j'ai abandonné et j'ai stocké les résultats de mes requêtes SQL dans des tableaux que j'utilise ensuite dans le foreach. Cette solution fonctionne, cependant je ne m'explique toujours pas pourquoi le foreach vidait mes tableaux.

Merci tout de même des réponses.
rps8484a est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h32.


 
 
 
 
Partenaires

Hébergement Web