Tableaux en PHP [Résolu/Fermé]

Signaler
-
 Lucy -
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

15 réponses

Messages postés
35
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
12 avril 2010
5
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
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...
En gros je voudrais savoir si c'est possible de faire un tableau associatif multidimentionnel ?
associatif, 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
associatif, 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
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
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'];
} 
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
Messages postés
35
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
12 avril 2010
5
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)
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
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 )
Messages postés
35
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
12 avril 2010
5
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
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?
Messages postés
35
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
12 avril 2010
5
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
Ah donc

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


ça marche?
Messages postés
35
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
12 avril 2010
5
oui
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....
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?
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']);
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
Je vais ouvrir un autre post pour mon histoire de doublons

Merci pour votre aide !!