Page 1 sur 1

Rand, quand le hasard fait mal les choses

Posté : 16 juil. 2010, 00:18
par Castor Gaspard
Bonjour,

Voici une petite question, en attendant de résoudre mon problème avec les Zip.

Je veux afficher deux images au hasard à partir d'un répertoire.

J'utilise le code suivant, emprunté dans la documentation de Php sur readdir, puis finement personnalisé (voire ciselé) :
if ($handle = opendir('media/'.$gallery.'small'))
{
$dir_array = array();
while (false !== ($file = readdir($handle)))
	{
		if ($file != "." && $file != "..")
		{
 		$dir_array[] = $file;
		}
	}
}
for($j=0;$j < 2;$j++)
{
    $picture = $dir_array[rand(0, count($dir_array)-1)];
// Reste du traitement pour l'affichage sans intérêt ici
Or, avec cette syntaxe, la même image peut-être affichée à deux reprises... surtout si le nombre d'images dans le répertoire est faible. Comment opérer un "tirage sans remise" comme le disait mes premiers manuels de biostatistiques ?

Merci pour votre aide. :mrgreen:

Cordialement,

Gaspard

Re: Rand, quand le hasard fait mal les choses

Posté : 16 juil. 2010, 00:58
par stealth35
tu pourrais faire un test voir si l'image a déjà été tirée, de toutes façons moins t'as d'image plus ta de chance de tombé sur la même le rand n'y est pour rien :wink:

Re: Rand, quand le hasard fait mal les choses

Posté : 16 juil. 2010, 07:53
par Castor Gaspard
Bonjour,

Merci, Stealth, pour ton aide.

Oui, rand() n'y est pour rien et, pour mon test, je n'ai que douze images, donc une chance sur six que le phénomène du doublon se reproduise. :(

Tester si l'image a été tirée, assurément, mais je ne suis pas certain que le jeu en vaille la chandelle.

Tant pis, je mets "résolu", puisque c'est un problème logique et non informatique.

Merci encore.

Gaspard

Re: Rand, quand le hasard fait mal les choses

Posté : 16 juil. 2010, 10:54
par Castor Gaspard
Bonjour,

Je donne la précision pour les archives de PhpFrance. Il suffit d'utiliser array_rand pour éviter les doublons.

Je livre mon code si ça peut intéresser...
/*** Affiche automatiquement une galerie d'images au hasard à partir des images contenues dans un répertoire. Les images peuvent au préalable posséder un titre dans leurs méta-données, écrit soit avec Php soit avec le logiciel Geekie sous Linux ou avec IrfanView sous Windows. */
$target_pictures = '2';
$gallery = $name_gallery;
$gallery .= '_';
if ($handle = opendir('media/'.$gallery.'small'))
{
$dir_array = array();
while (false !== ($file = readdir($handle)))
	{
		if ($file != "." && $file != "..")
		{
 		$dir_array[] = $file;
		}
	}
}
$rand_keys = array_rand($dir_array, $target_pictures);
{
	echo "\t".'<dl>'. "\n";
	for($i=0; $i<$target_pictures; $i++)
	{
		getimagesize('media/'.$gallery.'small/'.$dir_array[$rand_keys[$i]].'', $info);
		$iptc = iptcparse($info['APP13']);
		$title = $iptc["2#005"][0];
		echo "\t\t".'<dt>'. "\n";
		echo "\t\t".'<a href="media/'.$gallery.'medium/'.$dir_array[$rand_keys[$i]].'" title="'.$title.'"><img src ="media/'.$gallery.'small/'.$dir_array[$rand_keys[$i]].'" title="'.$title.'" alt="'.$title.'" /></a>'. "\n";
		echo "\t\t".'</dt>'. "\n";
	}
	echo "\t".'</dl>'. "\n";
}
closedir($handle);
Cordialement,

Gaspard