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 :

Imbrication de foreach


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre chevronné
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 262
    Par défaut
    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 ?)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut
    Merci de me répondre !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut


    Donc sans le "if", j'obtiens cela.

  5. #5
    Membre chevronné
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 262
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut
    (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.

Discussions similaires

  1. [MySQL] Imbrication de boucles et foreach
    Par Vinuto dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/04/2015, 13h14
  2. Imbrication de ForEach propre ou pas ?
    Par benny-blanco dans le forum C#
    Réponses: 2
    Dernier message: 27/05/2012, 21h49
  3. [JSTL]Imbrication de 2 forEach et d'un if
    Par A&N_L dans le forum Taglibs
    Réponses: 1
    Dernier message: 15/11/2010, 14h53
  4. suppression d'imbrication
    Par dor_boucle dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/07/2004, 12h30
  5. [debutant] suppression d'imbrication
    Par dor_boucle dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/07/2004, 18h01

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