Parcourir un tableau PHP

Absot Messages postés 777 Date d'inscription   Statut Membre Dernière intervention   -  
DeveloppeurPHP Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
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.. :/
A voir également:

18 réponses

Gabess Messages postés 1336 Date d'inscription   Statut Membre Dernière intervention   115
 
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   Statut Membre Dernière intervention   44
 
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
le père
 
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   Statut Membre Dernière intervention   44
 
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
le père
 
Ç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   Statut Membre Dernière intervention   15
 
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   Statut Membre Dernière intervention   44
 
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
le père
 
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   Statut Membre Dernière intervention   44
 
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
le père
 
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   Statut Membre Dernière intervention   1
 
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
le père
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   44
 
J'ai déjà trouvé, en faite, j'avais oublié d'inclure mon ficher avec mes fonctions xD
0
le père
 
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   Statut Membre Dernière intervention   44
 
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
le père
 
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   Statut Membre Dernière intervention  
 
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