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 :

Tableau multidimensionnel


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Par défaut Tableau multidimensionnel
    Bonjour à tous,

    voilà je vous explique mon problème, car d'une chose qui au premier abord me paraisait plutôt simple, j'ai l'impression de m'enfoncer dans un sac de noeuds, j'aimerais donc avoir votre avis sur la question.

    J'ai crée une méthode dans une Class qui me permet via une procédure stockée de faire du SQL dynamique. Je lui passe en paramètres tout un tas d'éléments dont les champs que je souhaite entre autres, la table.... Tout ça fonctionne merveillesement bien. Mon hic c'est que je souhaite que ma méthode me retourne un tableau pour pouvoir ensuite exploiter le résultat depuis les scripts qui appellent cette méthode.

    La difficulté pour moi se pose dans la construction de mon tableau, étant donné que ma requête est complètement dynamique, cela induit que je peux avoir un champ de retour, comme X champs de retour et je peux également avoir une ligne de retour comme X lignes de retour (j'ai tout de même un LIMIT).

    Ma question est donc comment gérer ce tableau. Pour l'instant j'ai fait une boucle qui me construit un tableau "multi dimensionnel" (je sais pas si le terme est bien employé dans mon cas de figure). C'est à dire que pour chaque ligne de résultat, j'écris une ligne dans mon tableau contenant elle même un autre tableau avec l'ensemble des valeurs de retours.

    J'ai un peu l'impression de ne pas prendre les choses dans le bon sens. Voyez vous d'autres solutions, astuces pour gérer ce genre de cas de figure.

    Par avance merci pour vos conseils.

    pour info, voici mon code si ça peut vous être un peu plus parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ....
    $i=0;
            while($enr = $rs->fetch())
            {            
                $j=0;           
                for($j;$j<count($enr);$j++)
                {
                    if ($j==0) $h=array();               
                    $h[]=$enr[$j];
                    if ($j==count($enr)-1) $t[$i]=$h;
                }          
                $i+=1;
            }
    return $t;

  2. #2
    Membre confirmé Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Si tu utilises PDO (car j'ai vu "$rs->fetch()"), tu devrait peut-etre essayer de regarder le resultat que donne $rs->fetchAll()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $tab = $rs->fetchAll();
    echo '<pre>';
    print_r( $tab );
    echo '</pre>';
    exit();
     
    // essayes aussi fetchAll( PDO::FETCH_ASSOC )

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Par défaut
    Merci bigltnt pour ta réponse.

    J'avais pensé à cette solution, mais il est souvent déconseillé d'utiliser fetchall() lorsque ce dernier peut être amené à renvoyer un grand nombre de résultats, c'est pourquoi je ne m'étais pas attardé dessus.

    J'ai comparé ça renvoie exactement la même chose, sauf que c'est beaucoup moins prise de tête que ma solution. Je vais donc sûrement utiliser fetchall().

    Merci pour ton conseil.

  4. #4
    Membre confirmé Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Tu as entièrement raison pour le fetchAll(), mais il y a un moyen de l'utiliser sans avoir ce problème :
    - Tu fais une premiere requete avec "SELECT COUNT(id) FROM matable WHERE mes_conditions"
    - Puis "SELECT mes_champs FROM matable WHERE mes_conditions LIMIT x,y"

    Le premier te donne le nombre de résultats et t'evites de tout sélectionner pour compter le nombre de lignes (c'est d'ailleurs déconseillé). Tu peux comme cela calculer le x/y du LIMIT pour la deuxième requete ainsi que les valeurs max pour ta pagination
    La deuxième te donne les résultats à proprement parler. En utilisant le LIMIT, tu n'a normalement qu'un nombre limité de résultats, et tu peux donc utiliser fetchAll()

    J'insiste sur le fait que la condition WHERE des deux requetes doivent être identiques (sans le LIMIT).

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2005, 15h41
  2. Réponses: 2
    Dernier message: 28/11/2005, 00h36
  3. Nombre de dimensions d'un tableau multidimensionnel
    Par Bruno75 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/07/2005, 11h03
  4. type de donnée tableau multidimensionnel
    Par opheliegomes dans le forum Débuter
    Réponses: 2
    Dernier message: 03/02/2005, 13h29
  5. [langage] tableau multidimensionnel
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2002, 16h58

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