Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    juin 2004
    Messages
    782
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : juin 2004
    Messages : 782
    Points : 791
    Points
    791

    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 :
    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 :
    $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

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

    Informations forums :
    Inscription : août 2006
    Messages : 943
    Points : 1 056
    Points
    1 056

    Par défaut

    Si tu veux un tableau associatif "facilement" lisible, je te conseille :

    Code :
    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 chevronné
    Profil pro
    Inscrit en
    juin 2004
    Messages
    782
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : juin 2004
    Messages : 782
    Points : 791
    Points
    791

    Par défaut

    J'ai modifié comme ça :
    Code :
    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 ) )

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

    Informations forums :
    Inscription : août 2006
    Messages : 943
    Points : 1 056
    Points
    1 056

    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 chevronné
    Profil pro
    Inscrit en
    juin 2004
    Messages
    782
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : juin 2004
    Messages : 782
    Points : 791
    Points
    791

    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..

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

    Informations forums :
    Inscription : août 2006
    Messages : 943
    Points : 1 056
    Points
    1 056

    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 chevronné
    Profil pro
    Inscrit en
    juin 2004
    Messages
    782
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : juin 2004
    Messages : 782
    Points : 791
    Points
    791

    Par défaut

    Problème identifié !!

    Merci beaucoup, je m'attache à contourner le array_merge()..

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

    Informations forums :
    Inscription : août 2006
    Messages : 943
    Points : 1 056
    Points
    1 056

    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 chevronné
    Profil pro
    Inscrit en
    juin 2004
    Messages
    782
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : juin 2004
    Messages : 782
    Points : 791
    Points
    791

    Par défaut

    Effectivement très pratique le format chm !!

    pour info je remplace array_merge par
    Code :
    $array = $array1 + $array2;
    trop magique php

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

    Informations forums :
    Inscription : août 2006
    Messages : 943
    Points : 1 056
    Points
    1 056

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •