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

Réplications Sybase Discussion :

[Tableaux] Clé dans un tableau associatif


Sujet :

Réplications Sybase

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut [Tableaux] Clé dans un tableau associatif
    Bonjour,

    J'ai un souci pour construire un tableau associatif :

    J'aimerais arriver à ça :
    Array ( [Access] => Array ( [5] => SP01 [6] => SP02 ) [F1 Team] => Array ( [3] => PSP01 [4] => PSP02 ) [RS] => Array ( [1] => PS01 [2] => PS02 ) )
    Les clés (de 1 à 6 ici) correspondent à des index de base de données.

    Voici comment je construis le tableau :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $sql = 'SELECT a.id_proto, a.num_proto, a.id_type, b.label_type
            FROM prototypes a, types b 
            WHERE a.id_type=b.id_type 
            AND a.id_fam='.$_POST['fam_support'].' 
            ORDER BY label_type,num_proto';
    $stmt = $db->query($sql);
    $tmp_typ = '';
    $veh = array();
    while ($row = $stmt->fetch())
    {
        if ($row['id_type'] == $tmp_typ)
        {
            $array = array($row['id_proto'] =>  $row['num_proto']);
            $veh[$row['label_type']] = array_merge($veh[$row['label_type']], $array);
            $tmp_typ = $row['id_type'];
        }
        else
        {
            $veh[$row['label_type']] = array($row['id_proto'] =>  $row['num_proto']);
            $tmp_typ = $row['id_type'];
        }
    }
    print_r($veh);      //TEST !!
    $template->assign('typ_supp',$_POST['typ_supp']);
    $template->assign('veh', $veh);
    $template->display('dt_form_vehsupp_veh.tpl');
    J'ai mis en gras l'endroit où j'insère les id de ma base en tant que clé.

    Mon problème c'est que le résultat de ce tableau est :
    Array ( [Access] => Array ( [0] => SP01 [1] => SP02 ) [F1 Team] => Array ( [0] => PSP01 [1] => PSP02 ) [RS] => Array ( [0] => PS01 [1] => PS02 ) )
    Chaque sous tableau reçoit des clés automatiques, partant de zéro...

    J'ai essayé en rentrant mes index de base comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array = array('"'.$row['id_proto'].'"' =>  $row['num_proto']);
    mais mes clés de tableau sont "x" au lieu de x

    Voilà, je sais pas si c'est très clair...
    Merci à ceux qui me liront
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  2. #2
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Si tu veux un tableau associatif "facilement" lisible, je te conseille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $array[$row['id_proto']]=$row['num_proto'];
    ca te permettra de pouvoir "lire" dans le code....
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    J'ai modifié comme ça :
    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
    16
    17
    while ($row = $stmt->fetch())
            {
                if ($row['id_type'] == $tmp_typ)
                {
                    $array = array();
                    $array[$row['id_proto']] = $row['num_proto'];
                    $veh[$row['label_type']] = array_merge($veh[$row['label_type']], $array);
                    $tmp_typ = $row['id_type'];
                }
                else
                {
                    $array2 = array();
                    $array2[$row['id_proto']] = $row['num_proto'];
                    $veh[$row['label_type']] = $array2;
                    $tmp_typ = $row['id_type'];
                }
    }
    pas mieux, echo donne :
    Array ( [Access] => Array ( [0] => SP01 [1] => SP02 ) [F1 Team] => Array ( [0] => PSP01 [1] => PSP02 ) [RS] => Array ( [0] => PS01 [1] => PS02 ) )
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  4. #4
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    ...Es-tu sur que tes clés ne sont pas de se format ????

    Si tu fait un echo de tes clés, tu devrais avoir la réponse....

    Car il me semble impossible que PHP fasse un auto-incrément si tu ne met pas la notation $array[].....
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    euh oui.

    un echo $row['id_proto'] dans la boucle renvoie '563412' ...

    Les 0 et 1 correspondent à des clés numériques, ce qui n'est pas faux, mais j'aimerais que Smarty le parcoure avec les clés 'textuelles'...

    en fait les clés servent à renseigner l'attribut value d'une liste de choix en html...

    Il faudrait peut-être que je me tourne vers Smarty..
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  6. #6
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    ca vient du array_merge

    voilà ce que dit la doc

    <?php
    $array1 = array();
    $array2 = array(1 => "data");
    $result = array_merge($array1, $array2);
    ?>

    N'oubliez pas que les index numériques seront renumérotés.
    Array
    (
    [0] => data
    )
    Essaye de faire un print_r() AVANT de faire ton array_merge, et compare les résultats.... Au passage, fait un petit tour sur php.net pour voir de quoi ca a l'air dans la doc, y a pas mal d'exemple.
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Problème identifié !!

    Merci beaucoup, je m'attache à contourner le array_merge()..
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  8. #8
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    De rien, bonne chance !!!

    PS : si tu es sous Windows, prend le manuel en CHM dans ma signature, 'est très pratique
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Effectivement très pratique le format chm !!

    pour info je remplace array_merge par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array = $array1 + $array2;
    trop magique php
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  10. #10
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Il n'y a jamais de problèmes, que des solutions.....
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/02/2008, 22h45
  2. [Tableaux] Boucle dans un tableau
    Par apprenti-fab dans le forum Langage
    Réponses: 9
    Dernier message: 24/04/2006, 11h14
  3. Réponses: 3
    Dernier message: 06/04/2006, 17h09
  4. Clé GE dans un tableau associatif
    Par ::Fistons dans le forum Langage
    Réponses: 5
    Dernier message: 31/03/2006, 11h57
  5. [Tableaux] Count dans un tableau
    Par krfa1 dans le forum Langage
    Réponses: 2
    Dernier message: 27/11/2005, 21h15

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