Faire une boucle en PHP

JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   -  
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis sur Joomla et je voudrais modifier un template de menu.
je voudrais que PHP affiche le contenu d'une table en sachant que :


$numerodelelementparent = $mitem->parent;
$element = $mitem->name;

$txt = '<table border="1" cellpadding="0" cellspacing="0"><tr>';


quel est la syntaxe à utiliser afin de dire : tant que $numerodelelementparent est identique, créer une nouvelle ligne ($txt = $txt.'<td>'. $element.'</td>';)

Merci par avance de vos réponses
A voir également:

10 réponses

scriptiz Messages postés 1424 Date d'inscription   Statut Membre Dernière intervention   425
 
$identique = $numerodelelementparent;
$txt = "";

while($numerodelelementparent == $identique)
{
    $txt .= "$txt<td>$element</td>";
    // lire le suivant élément et faire bouger $numerodelelement à la fin
}

0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
$txt = '<table border="1" cellpadding="0" cellspacing="0"><tr>';
while($numerodelelementparent==$numerodelelementparent_old){

	$numerodelelementparent_old=$numerodelelementparent; //memorisation ancienne valeur
	$numerodelelementparent = $mitem->parent;
	$element = $mitem->name;
	$txt .= '<td>'. $element.'</td>';
	
}

$txt .='</tr>';
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci pour vos réponses, néanmoins, cela ne fonctionne pas comme prévu.


Cas 1 : c'est long puis il y a un message d'erreur

$identique = $mitem->parent;
$txt = "";

while($mitem->parent == $identique)
{
    $txt .= "$txt<td>$element</td>";
    // lire le suivant élément et faire bouger $numerodelelement à la fin
}


Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 75497464 bytes) in D:\wamp\www\actionpositive\modules\mod_mainmenu\legacy.php on line 186

Cas 2 : c'est rapide mais n'affiche rien

						
									
while($parent==$identique){
									
	$parent=$mitem->parent;
	$identique = $parent;							
	$element = $mitem->name;


	$txt .= '<td>'. $element .'</td>';
	
}


Cas 3 : Cas 2 mais avec les variables à l'extérieures

	$parent=$mitem->parent;
	$identique = $parent;							
	$element = $mitem->name;								
									
while($parent==$identique){


	$txt .= '<td>'. $element .'</td>';
	
}


Fatal error: Maximum execution time of 30 seconds exceeded in D:\wamp\www\site1\modules\mod_mainmenu\legacy.php on line 179

Merci de vos réponses
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
si tu veux que ça s'affiche cas 2 il faut mettre tout à la fin echo $txt;
0

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

Posez votre question
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
En fait, je ne l'avais pas précisé mais dans les 3 cas, après "}", j'ai :

echo $txt= $txt.'</tr></table></td>';



@ +
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
while($parent==$identique){
	$identique = $parent;		//il faut mémoriser le contenu de la  variable $parent avant de la modifier				
	$parent=$mitem->parent;			//cette ligne va modifier la variable $parent					
	$element = $mitem->name;


	$txt .= '<td>'. $element .'</td>';
	
}
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Je viens d'essayer mais rien ne s'affiche.

Alors que si je remplace le code des précédents messages par :

$txt = $txt.'<tr><td><a href="' . $mitem->url . '" IDParent="'.$parent.'" class="' . $menuclass . '"'>' . $mitem->name . '  (ID enfant='.$mitem->id.')</a></td></tr>';


Il n'y a pas de problème, les éléments s'affiche bien et $parent affiche bien un "0" pour les parents et le numéro des parents, pour les enfants.

Les éléments s'affiche sauf que les enfants ne sont pas regroupées par parent d'appartenance mais affichés les un en dessous des autres.

Mon but est de regrouper tous les enfants appartenant à un même parent, dans un même tableau.

Et surtout de pouvoir les afficher.
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
//initialisation qui va permettre de rentrer la première fois dans la boucle et de donner une valeur de départ à $parent
$parent=$mitem->parent;
$identique = $parent;
//compteur pour eviter de tomber dans une boucle infinie et la fatal error
$i=0;
while($parent==$identique){
	$i++;
	if ($i>50) exit; //sortie de boucle si infinie
	$identique = $parent;		//il faut mémoriser le contenu de la  variable $parent avant de la modifier
		//mais il faut qu'a chaque boucle il y ait une instruction qui vienne changer qq chose à l'objet $item
		//$item->  ?  = ???
	$parent=$mitem->parent;			//cette ligne va modifier la variable $parent					
	$element = $mitem->name;


	$txt .= '<td>'. $element .'</td>';
	
}
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Bonjour,

Merci de ta réponse mais là plus rien ne s'affiche.

@+
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
c'est normal, as tu tenu compte des commentaires que je t'ai mis ?
il faut qu'a chaque passage de la boucle quelque chose change sinon boucle infinie


//initialisation qui va permettre de rentrer la première fois dans la boucle et de donner une valeur de départ à $parent
$parent=$mitem->parent;
$identique = $parent;
//compteur pour eviter de tomber dans une boucle infinie et la fatal error
$i=0;
while($parent==$identique){
	$i++;
	if ($i>50){
		echo "Boucle infine compteur de boucle = ".$i;
	exit; //sortie de boucle si infinie
	}
	$identique = $parent;		//il faut mémoriser le contenu de la  variable $parent avant de la modifier
	
		/////// mais ici, il faut qu'a chaque boucle il y ait une instruction qui vienne changer qq chose à l'objet $item
		//$item->  ?  = ???
		
	$parent=$mitem->parent;			//cette ligne va modifier la variable $parent					
	$element = $mitem->name;


	$txt .= '<td>'. $element .'</td>';
	
}
0