Traitement sur fichier

Eléphant du PHP | 291 Messages

04 juil. 2006, 08:50

Bonjour,

je scan un dossier contenant des images qui ont des nom du type : Numero_Nomalbum_Nomimage.jpg

Je cherche à faire une boucle pour que seulement la première image trouvée en fonction du Nomalbum soit retenue. C'est un préaffichage d'une galerie d'images en fait.

Je sais tout scanné mais je ne sais pas faire ce regroupement, je ne vois pas coment structuré la boucle.

Pouvez vous m'aider, d'avance merci

Eléphant du PHP | 291 Messages

04 juil. 2006, 09:39

alors avant de traiter l'affichage je vais proceder comme cela :
$tableau = array();

// ouverture du dossier
$dossier = opendir ($rep.$width."x".$height."/"); 
while ($fichier = readdir ($dossier)) {
        if ($fichier != '.' && $fichier != '..') {
                // on stocke le nom des fichiers
                $tableau[] = $fichier;
        }
} 
closedir ($dossier); 
donc je cré un tableau dans lequel je place le nom complet de mes fichiers, je peux decouper ce nom pour ne recuperer que fichier[1] qui corespond au Nomalbum, mais comment faire pour ne sortir qu'un seul fichier par album ?

merci

Eléphant du PHP | 291 Messages

04 juil. 2006, 10:10

suivant mon raisonnement, il faut faire un tableau puis sortir 1 nom une fois, et faire une corélation avec 1 fichier qui porte le même nom qui est sorti.

donc je dois stocker le nom quelque part dans qu'il à pas trouver de fichier corespondant, donc j'en suis arrivé a faire ca mais la condition est toujours vrai car je ne stock rien à l'exterieur
$tableau = array();
$tableau2 = array();
$tableau3 = array();

// ouverture du dossier
$dossier = opendir ($rep.$width."x".$height."/"); 
while ($fichier = readdir ($dossier)) {
        if ($fichier != '.' && $fichier != '..') {
                // on stocke le nom des albums
				$fich = explode("_", $fichier);
                $tableau[] = $fich[1];
				
				for ($i=0; $i<count($tableau); $i++){
				
				$tableau2[] = $fichier;
				$nom = explode("_", $tableau2[$i]);			
				
					if($nom[1] != $tableau[$i]) {
						$tableau3[] = $fichier;
					}
				}
        }
} 
closedir ($dossier); 

Eléphant du PHP | 291 Messages

04 juil. 2006, 12:51

Personne pour me donner un coup de pouce ?

j'ai mal expliqué peux être...

j'en suis au stade ou j'affiche toute mes images, il me reste a n'en prendre qu'une selon le nom

cad :

:arrow: 9876354_album1_nomphoto.jpg
:arrow: 4556456_album3_nomphoto.jpg
:arrow: 3454889_album4_nomphoto.jpg
2348703_album1_nomphoto.jpg
9872623_album4_nomphoto.jpg
9874372_album1_nomphoto.jpg
:arrow: 9183635_album5_nomphoto.jpg

j'ai mis un :arrow: pour montrer dans l'exemple ce que je souhaite sortir.

merci

Eléphant du PHP | 291 Messages

04 juil. 2006, 16:04

Ce que je veux faire à l'air impossible.

Sinon par quel procedé mettre une valeur en attante (session, variable??) pour scanner un nom, le comparer a la valeur en attente puis passer à la suivante et ainsi de suite ?

je ne bloque plus que sur ca
ca serait balot de tout changer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 juil. 2006, 16:46

Tu pourrais utiliser un tableau associatif : à chaque album tu associes le premier fichier trouvé, et si l'album est déjà dans le tableau, tu passes au fichier suivant...

Les fonctions in_array() et array_keys() devraient te permettre de faire ça facilement :)

Eléphant du PHP | 291 Messages

04 juil. 2006, 17:35

merci pour ton aide, je ne suis pas encore très agile avec ces tableaux.

voila ce que j'ai fais mais les valeurs sont mauvaises :
$rep = "albums/";
$width = "150";
$height = "150";


//$tableau = array();

// ouverture du dossier
$dossier = opendir ($rep.$width."x".$height."/"); 
while ($fichier = readdir ($dossier)) {
		if ($fichier != '.' && $fichier != '..' && $fichier != $width."x".$height) {
                
			$fi = explode("_", $fichier);
			$fic = $fi[1];
			
			if (!in_array ($fic, $tableau)) {
				
				//$tableau[] = $fichier;
				$tableau = array($fic => array("album"), $fichier => array("fichier"));
			}
		}
} 
closedir ($dossier); 

print_r(array_keys($tableau));
$nbcol=4;

echo '<br /><center><table border="1">' . "\n";
for ($i=0; $i<count($tableau); $i++){   

        if($i%$nbcol==0)  
        echo '<tr>' . "\n";
		echo '<td><img src="'.$rep.$width."x".$height."/".$tableau[$i].'" alt="'.$tableau[$i].'" /></td>' . "\n";
		// echo $tableau[$i].'<br />';
		
        if($i%$nbcol==($nbcol-1) or $i==(count($tableau)-1))
        echo '</tr>' . "\n";
}  
echo '</table></center><br />' . "\n";
je corige mon poste car je m'etais trompé et les balises etaient mauvaises aussi.

Donc j'associe bien un nom d'album à un fichier, pour l'affichage ca se passe diferement ?

Eléphant du PHP | 291 Messages

04 juil. 2006, 18:42

j'arrive à priori à enreistrer 2 valeur dans un tableau mais je ne n'arrive pas à toutes les lister :
<?php

$rep = "albums/";
$width = "150";
$height = "150";


//$tableau = array();

// ouverture du dossier
$dossier = opendir ($rep.$width."x".$height."/"); 
$i2=0;
while ($fichier = readdir ($dossier)) {
		if ($fichier != '.' && $fichier != '..' && $fichier != $width."x".$height) {
                
			$ext = explode(".", $fichier);
			$alb = explode("_", $ext[0]);
			
			if (!in_array ($fichier, $tableau)) {
				
				//$tableau[] = $fichier;
				$tableau = array($alb[1] => array("album"), $fichier => array("fichier"));
				$i2++;
			}
		}
} 
closedir ($dossier); 

//print_r(array_keys($tableau));




// foreach ($tableau as $fichier => $v) {
   // echo "Valeur : " . $fichier . "<br />\n";
// }



// echo '<br /><center><table border="1">';  
for ($i=0; $i<$i2; $i++){   

        //if($i%$nbcol==0)  
        // echo '<tr>';  
		//echo '<td><img src="'.$rep.$width."x".$height."/".$tableau[$i].'" alt="'.$tableau[$i].'" /></td>';
		//echo $tableau[$i].'<br />';
		
		foreach ($tableau as $fichier => $v) {
   echo "Valeur : " . $fichier . "<br />\n";
}

        //if($i%$nbcol==($nbcol-1) or $i==(count($tableau)-1))
        // echo '</tr>';  
}  
// echo '</table></center><br />'. "\n";

?>
Vous pouvez me dire ou je m'y prend mal ? merci