[php objet] Problème avec les tableaux

Résolu/Fermé
Aroeris
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013
- 15 mars 2010 à 14:50
Aroeris
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013
- 15 mars 2010 à 15:34
Bonjour,
J'ai un petit probleme donc concernant les tableaux en php. J'ai une fonction static dans une classe qui lis dans une base de données une table de pays (192).Je recupere leur numero et leur intitulé que je mets dans un tableau pis que je retourne. Ensuite je recupere ce tableau et j'affiche les valeurs.
Seulement voila au lieux de m'afficher les 192 valeurs j'en ai seulement 5. Quand je fais count(montableau) j'obtiens 4, et si je fais print_r(mon tableau) j'ai bien les 192 valeurs

Donc euh je suis un peu depassé là et je vois pas mon erreur donc peut etre qu'une personne exterieur la verra si j'ai de la chance
Merci d'avance

Voici mon code :
Fonction qui lis dans la base :
public static function init_nationalite()//créer/retourne un tableau de nationalite - connexion a la bdd
{
$cpt=0;
$montableau=array('id','intitule');
$requete=mysql_query("select idnationalite,nomnat from nationalite");
while($donnees = mysql_fetch_array($requete))
{
$montableau['id'][$cpt]=$donnees['idnationalite'];
$montableau['intitule'][$cpt]=$donnees['nomnat'];
$cpt++;
}
return $montableau;
}

Fonction qui affiche :
<?php
require("./connexion.php"); //connexion bdd
require("./Classe.php"); //fichiers de classe
$lespays=Demandeur::init_nationalite();
$cpt=0;
echo count($lespays)."<br />";
while($cpt<=count($lespays))
{
echo $lespays['id'][$cpt]."-----".$lespays['intitule'][$cpt]."<br />";
$cpt++;
}
?>

2 réponses

Bonjour

$tableau ne contient effectivement 4 éléments. Regarde bien attentivement ce que donne le print_r($tableau) :

$tableau[0] contient 'id'
$tableau[1] contient 'intitule'
$tableau['id'] contient un tableau de 192 valeurs
$tableau['intitule] contient un tableau de 192 valeurs

il faut bien que tu comprennes que quand tu fais deux opérations qui n'ont aucun rapport :
$montableau=array('id','intitule');
tu mets deux valeurs dans ton tableau, comme tu ne précises pas d'indice, elles sont mis en indices 0 et 1
alors que quand tu fais
$montableau['id'][$cpt]=$donnees['idnationalite'];
$montableau['intitule'][$cpt]=$donnees['nomnat'];
tu crées des éléments $montableau['id'] et $montableau['intitule'] dans ton tableau. Et comme valeurs, tu leur donne un tableau (c'est la manière normale de faire un tableau à deux dimensions en PHP).

les 'id' et 'intitule' jouent des rôles très différents dans les deux cas. En pratique, ton $montableau=array('id','intitule'); est totalement inutile, tu peux la supprimer

Si tu veux retrouver ton 192, ce n'est pas echo count($lespays) qu'il faut faire, mais echo count($lespays['id'])

Endin, si tu n'affiches 5 lignes, c'est que tu cumules deux erreurs dans
while($cpt<=count($lespays))
ce devrait être
while($cpt<count($lespays['id']))
(inégalité stricte)
1
Aroeris
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013

15 mars 2010 à 15:34
AAh okay je comprends je comprends, mais ce qui est bizarre cest que pour d'autres opérations j'ai fait la meme chsoe et ça marchait O_o lol
Bon bah je vais corriger tout ça, merci beaucoup de ta precieuse aide !
0