Generer images aleatoire sans repetion

Statut
N'est pas ouverte pour d'autres réponses.

WaKaaN

JcQL
Bonsoir a tous !

Voila mon soucis algorithmique...
J'ai cree une page generant des images aleatoirement pris dans un dossier.

Ca marche nickel, seulement avec mon algo, la page affiche parfois 2 fois la meme image... ce qui est normal vu comment je lai implemente..

Donc siouplait, qqun aurait-il de l'inspiration pour eviter les repetitions ?

Code:
function show($TYPE,$WIDTH,$HEIGHT) {
	     $PATH = "Test/".$TYPE."/";

 	     $dir=opendir($PATH); 
	     $i=1; 
	     while($file=readdir($dir))  { 
     		if ($file != "." && $file!="..")   { 
        	                         $Array[$i]=$file; 
        	                         $i++; 
                                } 
	        } 
		
	     closedir($dir); 

	     $rand=mt_rand(1,count($Array));     
	     $URL = "http://".$Array[$rand];
	     $PATH = $PATH.$Array[$rand];	
    	     
                     echo "<a href=\"$URL\" target=_new><img border=\"0\" src=\"$PATH\" width=\"$WIDTH\" height=\"$HEIGHT\"></a> "; 
	      
}


Mon appel de fonction
Code:
show("images","200","200");

Merci beaucoup !!


EDIT : Petite precision : La difficulte de la chose est que les appels de methode sont situes a differents endroit et qu'il faudrait donc utilise une variable global afin qu'apres un appel de methode, l'image choisie soit stockee et verifie dans la fonction show()...
 

guslinux

Gamerz'ien
En MySQL il y a la possibilité "ORDER BY Rand()"
 
1er
OP
WaKaaN

WaKaaN

JcQL
Je prefererais utiliser une methode sans passer par le MySQL... Mais si aucune autre solution ne se montre a moi, alors j'approfondirais le "ORDER BY Rand()"....
 

neku

Codeur roumain
il y a plusieur solution mais tu aura besoin d'une variable global.

Ce que je te propose c'est de faire une fonction qui genere ton tableau $Array et de la retourne le tableau.

Apres tu utilise ta fonction show mais avec un parametre dans lequel tu passe ton tableau creer précédement.
Lorsque tu as faire ton rand tu remplace la valeur du tableau a la position obtenue par le rand par NULL.
et donc tu ajoute a ta fonction show un test, apres avoir obtenu le ran, tu test simplement si le contenu = NULL si oui tu refait un rand sinon tu affiche.
Code:
while ($Tableau[$rand=mt_rand(1,count($Tableau))] == NULL);
Code:
function CreateArray ($Type) {		 
	$PATH = "Test/".$TYPE."/";
	$dir=opendir($PATH); 
	$i=1; 
	while($file=readdir($dir)  )  { 
		if ($file != "." && $file!="..")   { 
			$Array[$i]=$file; 
				$i++; 
		} 
	} 
		
	closedir($dir);
	return $Array;
}

function Show($Array, $WIDTH, $HEIGHT) {
	while ($Array[$rand=mt_rand(1,count($Array))] == NULL);
	$URL = "http://".$Array[$rand];
	$PATH = $PATH.$Array[$rand];	
	echo "<a href=\"$URL\" target=_new><img border=\"0\" src=\"$PATH\" width=\"$WIDTH\" height=\"$HEIGHT\"></a> ";
	$Array[$rand] = NULL;
	return $Array;
}
Voila, maintenant fais attention ce morceau de code ne vérifie pas si tu appel la fonction Show alors que toutes les entrées du tableau sont à NULL.
Si c'est le cas la fonction bouclera à l'infinit.
 
W

whatever42

ex membre
tu génères ton tableau de fichiers image,
comme l'a dit guslinux, tu le tries avec une fonction qui renvoie une valeur aléatoire,
et après tu prends autant d'images que t'as besoin puisées dans ton tableau ordonné aléatoirement,
et pas besoin de SQL

http://www.manuelphp.com/php/function.usort.php
 
1er
OP
WaKaaN

WaKaaN

JcQL
Ca a lair detre EXACTEMENT ce que je cherchais !!

Un Merci GEANT... Je teste, et je reviendrais surement poser qques questions dapprofondissement !
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut