2011-11-26 1 views
-2

J'utilise un script PHP pour afficher des images au hasard. J'ai dupliqué ce script trois fois parce que je voulais montrer trois images aléatoires à la fois - je ne sais pas comment changer le code php pour montrer 3 images. Le problème est que je ne veux pas courir le risque que les trois scripts montrent les mêmes images à la fois. Y at-il quelque chose que je pourrais ajouter à ce code pour m'assurer que chaque image affichée est toujours différente?PHP ensemble aléatoire d'images

<?php 
$random = "random.txt"; 
$fp = file($random); 
srand((double)microtime()*1000000); 
$rl = $fp[array_rand($fp)]; 
echo $rl; 
?> 

le code html:

<?php include("rotate.php"); ?> 
<?php include("rotate.php"); ?> 
<?php include("rotate.php"); ?> 

* le random.txt a juste une liste de noms avec des liens.

+0

@micha quels forums ?? o.O – tekknolagi

+1

google '$ random =" random.txt "; $ fp = fichier ($ random); srand ((double) microtime() * 1000000); $ rl = $ fp [array_rand ($ fp)]; echo $ rl; ' – noob

Répondre

1

Vous pouvez utiliser array_rand() pour sélectionner plus d'une clé aléatoire à la fois, comme celui-ci:

$random = "random.txt"; 
$fp = file($random); 
shuffle($fp); 
// You don't need this. The array_rand() function 
// is automatically seeded as of 4.2.0 
// srand((double)microtime()*1000000); 
$keys = array_rand($fp, 3); 
for ($i = 0; $i < 3; $i++): 
    $rl = $fp[$keys[$i]]; 
    echo $rl; 
endfor; 

Cela permettrait d'éliminer la nécessité d'inclure le fichier à plusieurs reprises. Tout peut être fait en même temps.

+0

Merci tas! J'aime vraiment que je n'ai pas besoin d'inclure le fichier trois fois! :RÉ – Jess

1

Vous pouvez écrire une fonction récursive pour vérifier si l'ID du tableau a déjà été imprimé et, le cas échéant, vous rappeler. Il suffit de mettre cela dans une boucle for pour imprimer trois fois :)

Gardez à l'esprit que vraiment random images pourraient se chevaucher!

$beenDisplayed = array(); 

function dispRand($id) { 
    if (in_array($id, $beenDisplayed)) { 
     //generate random number 
     dispRand($id); 
    } 
    else { 
     array_push($beenDisplayed, $id); 
    } 
} 

for ($i = 0; $i < 3; $i++) { 
    dispRand($random_id); 
} 
+0

une fonctions récursives semble un peu trop compliqué pour cette tâche – Galen

+0

@Galen peut-être, mais je n'ai jamais entendu parler de' shuffle': P – tekknolagi

5

solution simple ...

  1. Obtenez le tableau d'images aléatoires (vous l'avez déjà fait cela)
  2. Lecture aléatoire tableau
  3. Pop une image au large de la fin du tableau chaque fois que vous besoin d'un

rotate.php

$random = "random.txt"; 
$fp = file($random); 
shuffle($fb); //randomize the images 

dans votre code

<?php include('rotate.php') ?> 

Chaque fois que vous avez besoin d'une image

<?php echo array_pop($fb) ?> 

http://php.net/manual/en/function.array-pop.php

+0

c'est bon ... trop bon ... :) – tekknolagi

2
function GetRandomItems($arr, $count) 
{ 
    $result = array(); 
    $rcount = 0; 
    $arrsize = sizeof($arr); 
    for ($i = 0; ($i < $count) && ($i < $arrsize); $i++) { 
     $idx = mt_rand($rcount, $arrsize); 
     $result[$rcount] = trim($arr[$idx]); 
     $arr[$idx] = $arr[$rcount]; 
     $rcount++; 
    } 
    return $result; 
} 

$listname = "random.txt"; 
$list = file($listname); 
$random = GetRandomItems($list, 3); 
echo implode("<BR>", $list); 

post-scriptum En fait, la réponse de Galen est meilleure. Pour une raison quelconque, j'ai oublié lecture aléatoire xD