Repetition de foreach

Résolu/Fermé
mont_dani Messages postés 232 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 7 mai 2024 - 15 nov. 2021 à 15:13
mont_dani Messages postés 232 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 7 mai 2024 - 16 nov. 2021 à 17:59
Bonjour.

J'ai préparé un script pour afficher des photo dans une table en répartissant les photos sur trois colonnes.

Le souci est que le deuxième foreach ne fonctionne pas.
Les photos qui devraient être dans le deuxième foreach sont incluses dans le troisième.

Pour faire plus simple pour l'instant j'affiche seulement le nom de l'image.

Voici le code.
<?php
	      
		$categoria = "42111";
		$files = glob('../../image/galeria/'.$categoria.'*');
		$lines = count($files); // nombre de photo
		$nbcol = 3 ; // nb de colonne
		$nbphotocol = ceil($lines/$nbcol); //nb photo par colonne
		$col1 = $nbphotocol;
		$col2 = $col1+$nbphotocol;
		$i = 0;
		
		echo '<table width="60%" border="1"><tr>';
		echo '<td width="30%">';
		
     // premier foreach
		foreach($files as $valeur)
		{ 
				while ($i < $col1) { 
				echo 'col 1  ' .$valeur.'<br/>';	
				//echo '<img width="100%" src=" ' .$valeur. ' "><br />';
				break;
				}
			$i++;
		}
		echo '</td>';
		echo '<td width="30%">';
		
        // deuxieme foreach
		foreach($files as $valeur)
		{
				while ($i >= $col1 && $i < $col2) { 
				echo 'col 2 ' .$valeur.'<br/>';	
				//echo '<img width="25%" src=" ' .$valeur. ' "><br />';
				break;
				}
			$i++;
		}
		echo '</td>';
		echo '<td width="30%">';
		
      // troiseme foreach
		foreach($files as $valeur)
		{
				while ($i >= $col2) { 
				echo 'col 3 ' .$valeur.'<br/>';	
				//echo '<img width="25%" src=" ' .$valeur. ' "><br />';
				break;
				}
				
			$i++;
		}
		echo '</td>';
		echo '</tr></table>';
	
			
?>


Si quelqu'un pouvait m'aider, ce serait parfait, car ne connaissant pas trop php, j'ai réussi a faire cela mais maintenant je bloque.

Merci pour votre aide.

4 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
15 nov. 2021 à 15:19
Bonjour
Pourquoi es-tu une énième discussion pour le même genre de sujet... ?
Il me semblait qu'on avait déjà résolu ta demande ici
https://forums.commentcamarche.net/forum/affich-37398159-galerie-de-photo-en-trois-colonnes#15

Là, tu repars encore sur un nouveau script sans tenir compte des réponses précédentes

Quel intérêt ??
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
15 nov. 2021 à 15:29
Et pour expliquer ton soucis actuel, tu fais une boucle infinie...
Ton while ne se termine jamais vu que tu incrémentes ta variable i en dehors de cette boucle... Par conséquent, tu n'atteinds jamais la condition de ta boucle
0
mont_dani Messages postés 232 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 7 mai 2024
15 nov. 2021 à 16:14
Merci pour tes encouragements Jordane.

Bien sur que j'avais vu ton script, mais je n'arrivais pas a faire mon tableau.

C est pourquoi je me suis entêté a refaire en suivant un peu ton exemple.

En même temps cela me permet d'apprendre.
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
15 nov. 2021 à 16:36


Bien sur que j'avais vu ton script, mais je n'arrivais pas a faire mon tableau.

C est pourquoi je me suis entêté a refaire en suivant un peu ton exemple.


Ben dans ce cas tu poursuis dans la discussion initiale au lieu de recréer une nouvelle discussion sur le forum ....
Car si tu n'arrives pas à utiliser le code que je t'ai donné, tu demandes de l'aide dessus au lieu de refaire un code qui n'a ni queue ni tête....

Donc, si ton but est toujours de mettre 3 images par cellules, dans 3 colonnes... on peut repartir du code que je t'avais donné
<?php
 $files = glob('../../image/galeria/11121*'); // toute les photo qui commence par
  
$nb_colonne =3; // nombre de colonnes a l'affichage
$nb_imgCel = 3; // Nombre d'images par cellule

//variable utilisées pour recréer un array organisé comme tu le souhaites
$arrF = [];
$row = 0;
$col = 0;
$K = 0;

//on boucle sur chaque fichier :
foreach($files as $F){
 if($col>0 && $col % ($nb_colonne-1) == 0 && $K>=$nb_imgCel){
   $col=0;
   $K=0;
   $row++;   
 }
  if($K>0 && $K % $nb_imgCel == 0){
   $col++;
   $K=0;
 }
 
 $arrF[$row][$col][] = $F;
 $K++;
}

//pour voir à quoi ressemble l'array
echo "<pre>";
print_r($arrF);
echo "</pre>";
exit;



Il suffit donc de mettre trois boucles imbriquées sur la variable $arrF
ce qui devrait donner un truc du genre :
echo "<table>";
foreach($arrF as $Row ){
  echo "<tr>";
   foreach($Row as $Col){
     echo "<td>";
     foreach($Col as $img){
         echo "<img src='$img' />";
      }
       echo "</td>";
   }
  echo "</tr>";
}
echo "</table>";
0
mont_dani Messages postés 232 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 7 mai 2024
15 nov. 2021 à 18:36
Merci Jordane.
Ca fonctionne à merveille.

J'ai appris un peu plus.

A bientôt
0
mont_dani Messages postés 232 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 7 mai 2024
16 nov. 2021 à 15:06
Bonjour Jordane.


Je me suis réjouis trop vite.

Je viens de mettre sur le serveur le script, mais il ne fonctionne pas alors que en local tout va bien.

Aurais-tu une idée?

J'ai mis echo $lines qui me donne le numéro correct d'image mais les images ne s'affichent pas
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
16 nov. 2021 à 15:10
echo $lines .. c'est à dire ???
Dans le code que je t'ai donné.. je n'ai pas utilisé ce nom de variable .. à moins que je me trompe ???

Donc.. commence par nous montrer exactement le code que tu as mis sur le serveur.
Relis le bien.. pour être sûr d'avoir mis les bons chemins ...

Et éventuellement, donnes nous l'url pour accéder à la page
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
16 nov. 2021 à 15:15
Plutot que de supprimer ton message... mets un commentaire pour expliquer en quoi tu le considères obsolete ...
Histoire que je sache que je ne t'ai pas répondu pour rien....

Et pense à mettre la discussion en RESOLUE.
0
mont_dani Messages postés 232 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 7 mai 2024 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
16 nov. 2021 à 17:59
Ta réponse était parfaite.

J'ai résolu le problème que j'indiquai dans le dernier message.

J'avais transféré mon script sur el serveur et cela ne fonctionnait pas.

En réalité je faisais le test avec seulement deux photos et il en faut au moins 3.

Je te remercie pour ton aide et ton soutien. c'est parfait
0