Fonction dans une boucle

Eléphant du PHP | 291 Messages

18 nov. 2005, 18:23

Bonsoir,

J'ai un petit soucis avec une fonction que j'utilise dans une boucle for, en fait le but de cette fonction est de decouper le nom d'un fichier (selon le .) pour y associer une image en fonction de son extension, cette fonction marche très bien dans plusieurs pages mais la ou je veux l'utiliser (boucle for) la fonction se repete et m'affiche plusieurs fois le resultat.

voila l'appel de la fonction :
for ($i2=0;$i2<count($array_files);$i2++)
	{
		echo '<tr><td>';
		echo ICOext($array_files[$i2]);
		echo '</td><td>';
		echo '<a href="' . $dir . $array_files[$i2] . '">' . $array_files[$i2] . '</a>';
		echo '<td>';
}
et voila la fonction :
// Fonction de remplacement d'icone en fonction de l'extension d'un fichier

function ICOext($Fichier)
{

// Découpe le nom de fichier en fonction du . si present
	$fichier = explode(".", $Fichier); //ex : document_vierge.php
	$ext = $fichier[1]; // ex : php du fichier
	
	$open = opendir($icone_document); // Lecture du repertoire

		while($read = readdir($open))
        {
            if ($read != "." && $read != "..") { // Si different de . & ..
				
			$fichier2 = explode(".", $read); // ex : php.gif
			$ext2 = $fichier2[0]; // ex : php
			
				if ($ext == $ext2) { 

				echo '<img src="' . $icone_document . $fichier2[0] . '.' . $fichier2[1] . '" border="0" width="16" height="16" />';

				} else {
				
				echo '<img src="./images/design/icones/fichier.gif" border="0" width="16" height="16" />';

				}
			}
		}
}
j'ai essayé comme Truc m'avais indiqué :
$var=0;
while(......)
{
    if($var==0)
    {
       
       }
    }
    $var=1;
}
mais rien y fait, je pense que si j'integré la fonction dans le code directement ca devrait fonctionner mais je perdrais la fonction pour les autres pages qui l'utilisent

Qu'en penssez vous ?

D'avance merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 nov. 2005, 22:14

Salut, maintenant que je vois mieux le code je me dis que c'est logique que tu as plusieurs fois la meme chose.

Dans la fonction tu met en paramètre un fichier ensuite tu liste un dossier ($icone_document, qui d'ailleur est en variable globale apparemment, pas bien).

Exemple tu fait appel a la fonction avec "image.jpg" tu liste ton dossier et afficue tous les noms de fichier avec cette mette extension ".jpg"

si maintenant au 2eme tour de boucle tu fournis "autre_image.jpg" eh ben tu va avoir exactement la meme chose.

tu ne dois faire appel a la fonction que si c'est une extension qui n'a pas encore passée dans la fonction.

peut etre que tu peut faire le tri avant la boucle directement avec $array_files

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 291 Messages

19 nov. 2005, 14:00

Bonjour,

Alors en fait je compare pas sur l'extension mais dans la manière de fonctionner les images corespondantes portent le nom comme suit :

extension php => php.gif ou php.jpg

donc si la fonction s'applique a test.php, je prend juste php ensuite je liste le dossier d'image ou je ne garde que le nom donc si dans la boucle il trouve un php il va m'afficher l'image

C'est surement un peu compliqué ce que je veux faire mais c'est le seul moyen que j'ai trouvé pour ne pas faire de condition si

Sinon j'ai essayé de l'integrer a ma page au lieu d'utiliser la fonction mais j'ai besoin de connaitre le nom du fichier dans $array_files

Donc je vois pas trop comment faire pour le sortir

voila, merci pour ton aide

Eléphant du PHP | 291 Messages

19 nov. 2005, 15:19

Bon he bien j'ai trouvé une solution pour ne pas utiliser ma fonction dans cette page, c'est peu être pas tres propre ni tres ptimisé mais cla fonctionne, qu'en pensez vous ?
for ($i2=0;$i2<count($array_files);$i2++)
	{
		echo '<tr><td>';

		// Découpe le nom de fichier en fonction du . si present
		$img = explode(".", $array_files[$i2]); //ex : document_vierge.php
		$ext = $img[1]; // ex : php du fichier

if (file_exists($icone_document .$ext . ".gif")) {

	echo '<img src="' . $icone_document .$ext . '.gif" border="0" width="16" height="16" />';

		} elseif (file_exists($icone_document .$ext . ".jpg")) {
	
				echo '<img src="' . $icone_document .$ext . '.jpg" border="0" width="16" height="16" />';
	
			} elseif (file_exists($icone_document .$ext . ".jpeg")) {
	
					echo '<img src="' . $icone_document .$ext . '.jpeg" border="0" width="16" height="16" />';

} else {
				echo '<img src="' . $icone_document . 'fichier.gif" border="0" width="16" height="16" />';
}
Merci pour l'aide

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 nov. 2005, 16:04

Alors en fait je compare pas sur l'extension mais dans la manière de fonctionner les images corespondantes portent le nom
euh .. oui, pas bien fait attention :oops:

je dirais que c'est plus logique comme ça puisque tu ne boucle pas sur le dossier a chaque extension recherchée (pas de while() ) mais tu ne boucle que sur les fichiers du tableau.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute