Tableaux en PHP

Résolu
Bonjour,
Voilà je veux rechercher dans ma base de données des informations et les mettre dans un tableau.

ex: tabmachin['nom']=Durand;
tabmachin['prenom']=Paul;

Mais comme il y en a plusieurs, je peux faire:
for ($i=0; $i<$nbmax ; $i++){
tabmachin['nom'][$i]=Durand;
tabmachin['prenom'][$i]=Paul;
}
???

Sinon comment faire un tableaux à plusieurs X et Y ?

Merci
Configuration: Windows XP
Firefox 3.0.13

15 réponses

  1. quand tu lanceras ta requete du genre

    $resultat = mysql_query($req);

    $resultat te retournera un tableau associatif. tu pourras parcourir l'ensemble des resultats de cette maniere

    while($rows=mysql_fetch_assoc($resultat)){
    //on affiche la premiere ligne
    echo "nom: ".$rows['nom']." prenom: ".$rows['prenom']."<br>";
    }

    D'apres ce que je comprends tu cherches à afficher tes resultats colonne apres colonne alors que tu auras plus simple de les afficher ligne par ligne
    1. Non car c'est dans une fonction, à la fin je retourne mon tableau et je doit mouvoir l'utiliser.

      Et je doit avoir comme données:

             PREN     NOM
      0     Jean     Potier
      1     Paul     Cézam
      2     Julie     Depardieu
      3     Nico     Tetedevo
      4     Sandy  Kilo
      


      Et donc genre:

      $tabmachin['NOM'][2] va donner Depardieu
      ou bien $tabmachin['PREN'][4] va donner Sandy...
      1. En gros je voudrais savoir si c'est possible de faire un tableau associatif multidimentionnel ?
      2. @Lucyassociatif, multidimensionnel et dynamique !

        Genre:

        $tabdispo = array(
        	$i => array('jour' => date("d",$i), 'nom' => $nom, 'prenom' => $prenom, 'datedeb' => $date1 ,'hdeb' => $depart  ,'datefin' => $date2 ,'hfin' => $arrivee)
        );


        Mais ou j'initialise le $i? Ou je l'incrémente?

        Helpouille
      3. @Lucyassociatif, multidimensionnel et dynamique !

        Genre:

        $tabdispo = array(
        	$i => array('jour' => date("d",$i), 'nom' => $nom, 'prenom' => $prenom, 'datedeb' => $date1 ,'hdeb' => $depart  ,'datefin' => $date2 ,'hfin' => $arrivee)
        );


        Mais ou j'initialise le $i? Ou je l'incrémente?

        Helpouille
    2. Oui tout à fait c'est possible:

      $tabmachin=array(); //init de l'array
      while($rows=mysql_fetch_assoc($resultat)){
      //on empile dans l'array a chaque passage de la boucle ça va incrementer l'index deuxieme niveau automatiquement
      $tabmachin['nom')[]=$rows['nom'];
      $tabmachin['prenom')[]=$rows['prenom'];
      } 
      1. Automatiquement? Ainsi j'aurai toute mes données dans un même tableau?
        Le problème c'est que je ne veux pas tout les enregistrements.
        Arf c'est galère...

        Comment j'accède à ces données ensuite?

        Merci
    3. Si tu ne veux pas tous les enregistrements a toi de faire le tri dans la requete que tu vas executer.

      Par contre je ne vois pas trop l'interet de passer par un deuxieme tableau. (Ta requete te donneras un premier tableau)
      1. Automatiquement? Ainsi j'aurai toute mes données dans un même tableau?

        OUI , au premier passage de la boucle tu empile les données du premier client dans
        $tabmachin['nom')[0]
        $tabmachin['prenom')[0]

        au passage suivant celles du deuxieme client:
        $tabmachin['nom')[1]
        $tabmachin['prenom')[1]

        ça se fait tout seul

        pour y acceder:
        echo $tabmachin['nom')[1];

        par contre si tu ne veut pas tous le mettre dans ton array il faut faire une requette avec une condition WHERE

        $tabdispo = array(
        $i => array('jour' => date("d",$i), 'nom' => $nom, 'prenom' => $prenom, 'datedeb' => $date1 ,'hdeb' => $depart ,'datefin' => $date2 ,'hfin' => $arrivee)
        );


        en faisant ainsi tu changes le "sens" de ton array

        il devient

        $tabdispo[0]['nom']
        $tabdispo[0]['prenom']
        etc..
        $tabdispo[1]['nom']
        $tabdispo[1]['prenom']
        


        donc il faut modifier un peu la boucle while:
        $tabdispo=array(); //init de l'array
        $i=0;
        while($rows=mysql_fetch_assoc($resultat)){
        //on empile dans l'array a chaque passage de la boucle on increment le $i
        $tabdispo[$i]['nom']=$rows['nom'];
        $tabmachin[$i]['prenom']=$rows['prenom'];
        //etc.. pour les autres champs
        
        $i++;
        }  


        au passage je me suis rendu compte d'une petite erreur dans mon code du topic plus haut

        $tabmachin['nom')[]=$rows['nom'];
        $tabmachin['prenom')[]=$rows['prenom'];
        devient:
        $tabmachin['nom'][]=$rows['nom'];
        $tabmachin['prenom'][]=$rows['prenom'];

        crochet au lieu de )
        1. donc d'apres ce que tu dis alain, on revient à ma solution

          pas besoin de passer par un tableau intermediaire si c'est pour lire ligne par ligne.

          et si c'est une fonction tu retourne le resultat c'est pareil pas besoin de coder des lignes et des lignes en plus
          1. Je trie après ma requête.

            Je m'explique:

            
            $mois = "07";
            
            ++Requête
            
            ++Récupère données requête
            
            Tant qu'il y a des résultats:
            $nom=...
            $prenom=...
            $date1=...
            etc...
            
            ++Triage
            Si le mois de la date correspond au mois $mois
            alors je veux dans mon tableau les variables $jour, $nom, $prenom, $dat......
            
            on passe à la ligne suivante
            Fin tant que
            
            retourner tableau
            
            


            C'est plus clair? Car je ne crois pas que ta solution convenait. Si?
            1. par contre jte conseille de faire le tri avant de lancer ta requete si tu peux le faire. Quand tu travailles sur des petites bases à la rigueur tu tries apres mais quand tu as une bdd volumineuse faut le faire avant
              1. Ah donc

                {
                $tabdispo[$i]['nom']
                $tabdispo[$i]['prenom']
                $i++
                }


                ça marche?
                1. J'ai pas le choix, je trie après car il faut que je sélectionne que les lignes ou le mois correspond à mon mois en cours.

                  En fait, c'est pour afficher les informations (nom, prenom...) dans un calendrier de réservation.

                  Sachant qu'un réservation a une date de début et date de fin....
                  1. Et ensuite je retourne ça avec juste "return $tabdispo;" ?

                    Et pour utiliser mes données je fais:

                    de $i a $imax
                    $tabjour[] = $tabdispo[$i]['jour'];
                    fin

                    $nom = $tabdispo[$i]['nom'];

                    C'est exact?
                    1. Bon j'ai testé dans mon code et ça bug.

                      Comment puis-je enlever les doublons de jours?

                      Avant quand j'avait un tableau simple contenant que les jours je faisais:

                      $tabdispo = array_unique($tabdispo);


                      Maintenant que j'ai plusieurs infos j'ai testé ça sans succès:

                      $tabdispo = array_unique($tabdispo[]['jour']);
                      1. Ah oui, aussi, quand je fais

                        echo "<td class=\"reserve\">$tabdisp[$k]['nom']</td>";


                        J'ai " Array['nom'] " dans ma case à l'écran...

                        Merci d'avance
                        1. Je vais ouvrir un autre post pour mon histoire de doublons

                          Merci pour votre aide !!