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

PHP & Base de données Discussion :

Parcours d'array et boucle while [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut Parcours d'array et boucle while
    Bonjour à tous.

    Bon voila le souci. Je n'arrive pas à parcourir deux fois de suite le même array.
    Je m'explique :

    J'ai le résultat d'une requête comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result=pg_query($connection, $requete);
    qui me renvois un certain nombre de lignes sur disons 10 colonnes (ou champs).

    Je parcours ce résultat une première fois en utilisant les 5 premières colonnes pour construire un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ($arr = pg_fetch_array($result))
    {
    <table> .........</table>
    }
    Jusque là, ça va bien.

    Plus loin dans ma page, je veux reparcourrir ce même résultat pour construire un deuxième tableau avec cette fois les cinq dernières colonnes.
    Je fait donc la même chose que précédemment ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ($arr =  pg_fetch_array($result))
    {
    <table> .........</table>
    }
    Et là, c'est le drame. Mon deuxième tableau est vide.
    Si je supprime le bout de code code qui remplis le premier, le deuxième se remplis correctement.

    D’où j'en conclu qu'une fois l'array parcourus avec la boucle while, il reste "coincé" sur le dernier élément et ne reviens pas au début pour être parcourus une deuxième fois.

    Comment puis-je le reparcourir sans relancer une deuxième fois la même requête ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu peux replacer le pointeur de résultat à 0 avant de le parcourir pour la 2e fois en utilisant pg_result_seek.

    EDIT : Prem's!
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    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
    Salut,

    pour parcourir une seconde fois ton résultat, tu dois réinitialiser le pointeur interne en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pg_result_seek($result, 0)
    Sinon, il est possible de créer le contenu des 2 tableaux en une seule passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($row = pg_fetch_array($result)) {
        $table1[] = ...;
        $table2[] = ...;
    }
    echo '<table>', implode("\n", $table1), '<table>', '<table>', implode("\n", $table2), '<table>'
    EDIT : grilled !

  4. #4
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Merci, je ne connaissais pas pg_result_seek.
    J'essaierais ça demain.

    @ Celira : J'ai posté dans PHP parce que je pensais plus à un problème de la boucle while avec le parcours d'un tableau qu'au pointeur inetrne de pg.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Incrémenter un Array par une boucle While
    Par Misoss dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2010, 21h38
  2. multiples array dans un, combiner avec boucle while
    Par leymiris dans le forum Langage
    Réponses: 2
    Dernier message: 27/07/2010, 16h19
  3. Réponses: 6
    Dernier message: 27/05/2010, 10h48
  4. [PHP 5.3] Parcourir deux array à la manière de deux boucle while
    Par jflorence dans le forum Langage
    Réponses: 8
    Dernier message: 23/03/2010, 17h35
  5. [MySQL] array boucle while mots clé
    Par fx_web dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/10/2009, 13h05

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