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 :

[Tableaux] Tableaux multidimensionnels et empilement dynamique


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut [Tableaux] Tableaux multidimensionnels et empilement dynamique
    Bonjour.

    Pour remplir un tableau au fur et à mesure de l'execution du code, je procède de la facon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tab[]='1';
    $tab[]='2';
    $tab[]='3';
    print_r($tab);
    Quelle est la syntaxe pour un tableau à deux colonnes, pour faire de la même facon un "empilement"?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tab[][]=.... ?
    $tab[]=(..,..) ?
    Je n'ai pas réussi à trouver dans la doc.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 393
    Points : 15 754
    Points
    15 754
    Par défaut
    regarde sur ces 2 pages, tu trouvera des exemples d'utilisation des tableaux :
    http://php.net/language.types.array
    http://php.net/array

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Cette syntaxe marche, mais sans grande utilité car il incrémente les 2 indices.

    Cette syntaxe ajoute un élément dans la 2ème diension pour une 1ère fixée.

    Ya aussi d'autre facon de faire, ca dépend de ce que tu souhaite

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Merci pour ce début de réponse.

    Au fur est à mesure de l'execution de mon code, je veux remplir (sans connaitre au debut de l'execution le nombre de données que j'aurais, donc le nombre de lignes total du tableau), un tableau, avec un couple de données (par exemple une date associée à une temperature).

    Neophyte en php, je ne connais pas suffisement ce langage pour savoir si on peut définir un équivalent du "record" en pascal, a savoir une supervariable qui en contient plusieurs. Ensuite remplir un tableau à une colonne de la facon precedement indiquée $tableau[]=

    Ou, plus simplement, si dans le cadre de cet empilement de données au fur et à mesure de l'execution , avec des syntaxes style $montableau[][]=... , on peut y ajouter un couple de deux variables (donc tableau à deux colonnes et un nombre non déterminé de lignes, qui seront renseignées progressivement).
    Je sais le faire pour un tableau à 1 colonne, mais pas à deux.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      for ($i=0; $i < 1000; $i++)
       $tab[$i] = array('date' => 'votre_date', 'temperature' => 'votre_temperature');
    Au final, vous aurez 1000 lignes d'une colonne contenant deux colonnes (date, temperature).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Neophyte en php, je ne connais pas suffisement ce langage pour savoir si on peut définir un équivalent du "record" en pascal, a savoir une supervariable qui en contient plusieurs.
    Je trouve effectivement que c'est un manque du PHP, on ne peux pas faire de structure (ou alors je connais pas), c'est dommage.

    Il de faut utiliser la solution indiqué par DaRiaN, ou si tu n'as que 2 donnée, tu peux aussi en utiliser une comme clé et une autre comme valeur du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab[$date] = $temperature;
    Ou l'inverse suivant ce que tu veux faire

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par DaRiaN Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      for ($i=0; $i < 1000; $i++)
       $tab[$i] = array('date' => 'votre_date', 'temperature' => 'votre_temperature');
    Au final, vous aurez 1000 lignes d'une colonne contenant deux colonnes (date, temperature).
    et si je viens à dépasser les 1000? C'est là mon probleme. Au depart je ne sais pas combien je peux en avoir... Donc je voulais une allocation dynamique.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Eric93 Voir le message
    Il de faut utiliser la solution indiqué par DaRiaN, ou si tu n'as que 2 donnée, tu peux aussi en utiliser une comme clé et une autre comme valeur du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab[$date] = $temperature;
    j'oublais de préciser que je peux avoir des doublons, pour la solution ci dessus, ca ne va pas non plus (désolé )

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par pratiquement Voir le message
    et si je viens à dépasser les 1000? C'est là mon probleme. Au depart je ne sais pas combien je peux en avoir... Donc je voulais une allocation dynamique.
    L'allocation est dynamique, je pense que le 1000 n'était là quà titre d'exemple.
    Il voulait dire que tu devais itérer sur le nombre d'occurences de ta source de données : fichier, bdd, etc...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Oui c'étais qu'un exemple tu peux écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab[] = array('date' => 'votre_date', 'temperature' => 'votre_temperature');
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab[] = array('votre_date', 'votre_temperature');

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Génial, ca marche.

    Merci à tous

    Je m'en vais programmer maintenant la fonction pour trier les couples de données par ordre alphabetique des valeurs du premier champ.

    Bonne fin de journée.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Tu peux aussi inverser tes dimensions, au lieu d'avoir un tableau de n occurences constituées chacune d'un tableau de 2 occurences, tu peux faire l'inverse, avoir un tableau de 2 occurences constituées chacune d'une tableau de n occurence.

    Ce qui donnerais dans ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab['date'][] = 'votre_date';
    $tab['temperature'][] = 'votre_temperature';
    Cette facon de faire à le gros avantage de te permettre d'utiliser la fonction array_multisort et ainsi t'éviter d'avoir à la développer, tu as juste à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_multisort($tab['date'],$tab['temperature']);
    Ainsi ton tableau seras trié sur la date en 1er critère et sur la température en 2ème, les associations date et température seront conservés.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Merci.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Tu peux aussi préciser l'ordre de tri, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array_multisort($tab['date'], SORT_ASC,
                    $tab['temperature'], SORT_DESC);

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    mes données sont liées l'une à l'autre...

    par exemple

    jour temperature
    ---------------------
    lundi 20
    mardi 18
    jeudi 13


    si je demande un tri alphabétique par sur la colonne jour

    ca doit faire

    jour temperature
    ----------------------
    jeudi 13
    lundi 20
    mardi 18


    et non

    jour temperature
    ----------------------
    jeudi 13
    lundi 18
    mardi 20

    (chaque colonne triée indépendament l'une de l'autre)

    donc c'est tout une ligne (deux données) qu'il faut déplacer, sur un meme index de ligne.

    Donc le dernier exemple donné ne conviendra pas.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    C'est pas normal, d'après la doc il doit pas les trier les 2 tableau indépendament, il dois les trier ensemble sur la valeur du 1er tableau, et du 2ème en cas de clés égale dans le 1er, il doit y avoir une erreur dans ton code.

    Pourrais tu me donner ton code ?

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Je suis désolé,
    etant parti à coder le tri "à bulle" ... j'ai effacé et n'ai pas conservé mon essai.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Comme tu veux, cette fonction est censé marcher, j'ai bien relu la doc, ya pas de raison que ca marche pas, il devais y avoir une erreur quelque part.

    Tu t'embète pour rien a faire un tri, mais c toi qui voit

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Je n'ai pas de quoi tester pour l'instant, je testerais ca se soir, car ca m'intrigue

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/12/2009, 15h02
  2. [Tableaux] tableau multidimensionnel
    Par Biosox dans le forum Langage
    Réponses: 3
    Dernier message: 15/03/2007, 17h41
  3. [Tableaux] Tableau multidimensionnel associatif
    Par Anne1969 dans le forum Langage
    Réponses: 12
    Dernier message: 20/02/2007, 14h51
  4. [Tableaux] Génération de document RTF dynamiquement.
    Par gamerome dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2006, 12h27
  5. [Tableaux] Tableau Multidimensionnel
    Par Captain_futur dans le forum Langage
    Réponses: 3
    Dernier message: 09/12/2005, 21h37

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