Parcourir un tableau PHP

Fermé
Absot Messages postés 777 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 4 septembre 2020 - 3 mars 2010 à 02:31
DeveloppeurPHP Messages postés 3 Date d'inscription vendredi 5 mars 2010 Statut Membre Dernière intervention 5 mars 2010 - 5 mars 2010 à 09:38
Bonjour, j'ai créé une fonction en PHP qui me renvoi un tableau avec des valeurs, ensuite je récupère ces valeurs avec un autre tableau et je voudrais savoir comment parcourir se tableau avec une boucle sachant que je ne sais pas combien il y a de valeurs?

Par exemple:
fonction retourneNombre()
{
$tableau = array();
$i = 1;
while ($i < 10)
{
$tableau[] = $i; 
}
return $tableau[];
}

$tableau2 = array();
$tableau2[] = retourneNombre();

while (???)
(

)


Je ne sais pas quoi mettre dans mon deuxième while pour que le tableau se parcourt tout seul.. :/

18 réponses

Gabess Messages postés 1336 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 21 juillet 2010 114
3 mars 2010 à 02:38
Salut

Tu as un problème dans ta première fonction déjà
Il y a une boucle infinie, $i ne change jamais.
et je pense qu'il serait plus approprié de mettre:
$tableau[$i]=valeur; plutot que $tableau[]=$i
1
Absot Messages postés 777 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 4 septembre 2020 44
3 mars 2010 à 17:34
Oui je me suis trompé, c'était un exmeple, donc ma fonction serait:

fonction retourneNombre()
{
$tableau = array();
$i = 1;
while ($i < 10)
{
$tableau[$i] = $i; 
$i++;
}
return $tableau[];
}

$tableau2 = array();
$tableau2[] = retourneNombre();

while (???)
(

)


Qu'est-ce que je peux mettre dans mon while j'ai essayé de faire:
while ($tableau2[] = retourneNombre())
{

}

Mais ça ne remplit rien..

Je m'en mêle les pinceaux.. :/
0
Bonjour

Remarque : ton $tableau[] = $i; (sans $i entre les [ ]) était parfaitement correct.
Pour parcourir ton tableau, il faut déjà l'affecter correctement :

// $tableau2 = array(); // inutile, cette action va être écrasée par la ligne suivante
$tableau2 = retourneNombre(); // sans []

et pour le parcourir, il y a l'instruction foreach :
foreach ($tableau2 as $valeur) {
...
}
0
Absot Messages postés 777 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 4 septembre 2020 44
3 mars 2010 à 18:16
Je ne comprends pas pourquoi ça ne m'affiche rien, voici le vrai code:
function retourneCategorie()
{
	$tableau = array();
	$i = 0;
	$query = "SELECT * FROM Categorie ORDER BY idCategorie ASC;";
	$result = mysql_query($query) or die(mysql_error());
	while $line = mysql_fetch_array($result)
	{
		$tableau[$i] = "<OPTION VALUE='$line['idCategorie']'>$line['nomCategorie']</OPTION>";
		$i++;
	}
	echo $tableau[0];
	return $tableau[];
}


<td><SELECT name="categorie"><?php
			$categorie = retourneCategorie();
			$i=0;
			foreach ($categorie as $valeur)
			{
				echo $valeur;
				$i++;
			}
			?></SELECT></td>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ça m'étonnerait que ce soit ton vrai code, il manque des parenthèses autour de la condition du while.
D'autre part, pour retourner un tableau, il faut retourner... la tableau et non pas un élément (sans indice, en plus !)
=> return $tableau; et non pas return $tableau[];
0
devMan Messages postés 74 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 16 septembre 2010 15
3 mars 2010 à 18:46
essayer avec directement :
<?php  
echo "<select name='categorie' id='categorie'>";   
mysql_connect("localhost","root","");  
mysql_select_db("asptt");  
$res = mysql_query("SELECT * FROM Categorie ORDER BY idCategorie ASC;'")or die(mysql_error());  
while($row = mysql_fetch_assoc($res)){?>  
  
<option value="<?php echo $row['idcat'] ;?>"><?php echo $row['nomcat'];?></option>  
<?php }  
echo "</select>";  
?> 
0
Absot Messages postés 777 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 4 septembre 2020 44
3 mars 2010 à 20:04
C'est réellement mon code sauf qu'en le modifiant, j'ai oublié de mettre les parenthèses.

Ça ne fonctionne toujours pas, ça ne renvoi rien j'ai l'impression :(
0
C'est réellement mon code sauf que
Si c'est "sauf que", ce n'est pas réellement ton code.
Je vois une autre erreur, tu as des ' en trop dans ta ligne
$tableau[$i] = "<OPTION VALUE='$line['idCategorie']'>$line['nomCategorie']</OPTION>";
ce devrait être
$tableau[$i] = "<OPTION VALUE='$line[idCategorie]'>$line[nomCategorie]</OPTION>";
(un indice de tableau associatif dans une chaîne entre " ne DOIT PAS être entouré de ' )

Peux-tu montrer ton code corrigé ? En faisant un copier-coller

Au passage, pourquoi vouloir rendre un tableau de chaînes plutôt qu'une seule chaîne dans laquelle tu aurais tout concaténé ? Pourquoi même ne pas faire directement les 'echo' dans la fonction - qui n'aurait plus rien du tout à rendre ?
0
Absot Messages postés 777 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 4 septembre 2020 44
4 mars 2010 à 12:52
Voilà le "vrai code"

function retourneCategorie()
{
	$res = "";
	$query = "SELECT * FROM Categorie ORDER BY idCategorie ASC;";
	$result = mysql_query($query) or die(mysql_error());
	while ($line = mysql_fetch_array($result))
	{
		$res = $res."<OPTION VALUE='$line[idCategorie]'>$line[nomCategorie]</OPTION>";
	}
	return $res;
}


<SELECT name="categorie">
			<?php
			$categorie = retourneCategorie();
			$i=0;
			foreach ($categorie as $valeur)
			{
				echo $valeur;
				$i++;
			}
			?>
			</SELECT>


J'ai voulu créer une fonction qui renvoie le nom des catégories pour faire plus propre mais comme je ne fais appel qu'une seule fois à elle, je suis en train de me dire que ça sert à rien et que je ferais tout aussi bien de directement faire la requête SQL sans passer par une fonction..
0
Tu as modifié ta fonction pour qu'elle renvoie une simple chaîne au lieu d'un tableau.
Alors que signifie cette boucle foreach sur une variable qui n'est plus un tableau ? Tu ne trouves pas ça absurde ?
tu as juste à faire
<SELECT name="categorie">
<?php echo retourneCategorie(); ?>
</SELECT>

au passage, au lieu de faire $res = $res . "xxx", tu peux faire simplement $res .= "xxx"
0
Optimal-effect Messages postés 14 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 12 mars 2010 1
4 mars 2010 à 14:12
Bonjour à tous,

<?php
function retourneCategorie()
{
	$res = '';
	$query = 'SELECT * FROM Categorie ORDER BY idCategorie ASC';
	$result = mysql_query($query) or die(mysql_error());
	$tab_cat = mysql_fetch_assoc($result);
	foreach ($tab_cat as $val)
		$res .='<option value="'.$val.'">'.$val.'</option>';
	return $res;
}

echo '<select name="categorie">';
echo retourneCategorie();
echo '</select>';
?>


Essaye ça si t'as pas déjà trouvé.
0
Essaye ça si t'as pas déjà trouvé.
Pas la peine. Ta fonction retourneCategorie parcourt tous les champs d'une seule réponse, au lieu de parcourir l'ensemble des réponses d'une requête. Le problème de Absot n'est pas à ce niveau.
0
Optimal-effect Messages postés 14 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 12 mars 2010 1
4 mars 2010 à 15:05
Effectivement, désolé... j'ai lu en diagonale...
Bah, je pense qu'il aura compris le principe de while() et foreach() avec ça.

Bien vu el Padre ;-)
0
Absot Messages postés 777 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 4 septembre 2020 44
4 mars 2010 à 17:13
J'ai déjà trouvé, en faite, j'avais oublié d'inclure mon ficher avec mes fonctions xD
0
j'avais oublié d'inclure mon ficher avec mes fonctions xD
Donc le "vrai code" que tu avais montré n'était toujours pas le vrai code ? C'était deux bouts que tu avais mis côte à côte.... Comment peut-on t'aider avec de fausses informations ?
N'empêche que les erreurs que je t'ai signalées étaient bien réelles.
0
Absot Messages postés 777 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 4 septembre 2020 44
4 mars 2010 à 19:49
J'ai un fichier avec mes fonctions et un autre fichier où j'appel la fonction mais les deux codes étaient bien les bons..
0
les deux codes étaient bien les bons..
Je relis tes messages 2, 4 et 9 et tu n'y présente pas deux codes mais LE code.
0
DeveloppeurPHP Messages postés 3 Date d'inscription vendredi 5 mars 2010 Statut Membre Dernière intervention 5 mars 2010
5 mars 2010 à 09:38
Bonjour;
je vais vous répondre sur ta première question indépendant de tes codes plein d'erreur.
Donc pour parcourir un tableau:
- foreach ($tableau2 as $valeur) {
echo $valeur;
}
- $i=0;
while($i<count($tableau2))
{
echo $tableau2[$i];
$i++;
}
0