Précédent   Forum du club des développeurs et IT Pro > Bases de données > Sybase > Réplications
Réplications Forum d'entraide sur toutes les formes de réplication de Sybase : Replication Server, replicator, SQL remote, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/06/2007, 15h54   #1
pc.bertineau
Membre chevronné
 
Inscription : juin 2004
Messages : 770
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 770
Points : 775
Points : 775
Par défaut [Tableaux] Clé dans un tableau associatif

Bonjour,

J'ai un souci pour construire un tableau associatif :

J'aimerais arriver à ça :
Citation:
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 :
Citation:
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
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 16h14   #2
viviboss
Membre Expert
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 1 056
Points : 1 056
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
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 16h21   #3
pc.bertineau
Membre chevronné
 
Inscription : juin 2004
Messages : 770
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 770
Points : 775
Points : 775
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 :
Citation:
Array ( [Access] => Array ( [0] => SP01 [1] => SP02 ) [F1 Team] => Array ( [0] => PSP01 [1] => PSP02 ) [RS] => Array ( [0] => PS01 [1] => PS02 ) )
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 16h26   #4
viviboss
Membre Expert
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 1 056
Points : 1 056
...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
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 16h32   #5
pc.bertineau
Membre chevronné
 
Inscription : juin 2004
Messages : 770
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 770
Points : 775
Points : 775
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..
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 16h58   #6
viviboss
Membre Expert
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 1 056
Points : 1 056
ca vient du array_merge

voilà ce que dit la doc

Citation:
<?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
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 17h05   #7
pc.bertineau
Membre chevronné
 
Inscription : juin 2004
Messages : 770
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 770
Points : 775
Points : 775
Problème identifié !!

Merci beaucoup, je m'attache à contourner le array_merge()..
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 17h12   #8
viviboss
Membre Expert
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 1 056
Points : 1 056
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
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 17h27   #9
pc.bertineau
Membre chevronné
 
Inscription : juin 2004
Messages : 770
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 770
Points : 775
Points : 775
Effectivement très pratique le format chm !!

pour info je remplace array_merge par
Code :
$array = $array1 + $array2;
trop magique php
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 17h35   #10
viviboss
Membre Expert
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 1 056
Points : 1 056
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
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h02.


 
 
 
 
Partenaires

Hébergement Web