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. Je vais ouvrir un autre post pour mon histoire de doublons

    Merci pour votre aide !!
    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. 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. 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. 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. Ah donc

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


              ça marche?
              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. 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. 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. 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. 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. 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
                        2. 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
                        3. 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