[PHP] Image in random wordt meerdere keren weergeven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste coders,

Loop een beetje vast met de volgende code. Hij laat wel de plaatjes in en weergeeft ze random, maar het plaatje verschijnt soms meerdere keren in beeld. Hoe kan ik dat verhelpen dat elke file een keer wordt ingeladen.

Thx.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  function getThumbList(){
         $mylist = array();
   
          // Open the actual directory
          if ($handle = @opendir($this->thumbDir)) {
            
             // Read all file from the actual directory
              while ($file = readdir($handle))  {
                 if (!is_dir($file)) {
                     $mylist[] = $file;
                    //srand(time()); 
                    $i = rand(0, count($mylist)-1); 
                    $random_file[] = $mylist[$i]; 
                 }
              }
          } 
          return $random_file;
    }

Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

Eerst alle files in de array zetten, dan de array met de functie "shuffle" door elkaar husselen en dan met een nieuwe loop de plaatjes weergeven.

-edit-
De functie getThumbList moet dus een volledige array terug geven i.p.v. één plaatje, anders weet je niet welk plaatje al is gebruikt.

Het kan wel maar dan zul je of een class moeten maken of je moet smerige global variables toepassen.

[ Voor 47% gewijzigd door TheBorg op 25-04-2008 21:32 ]


Acties:
  • 0 Henk 'm!

Verwijderd

http://nl3.php.net/array_rand

Gewoon even in de manual kijken.

Acties:
  • 0 Henk 'm!

Verwijderd

Wat ik nog wel eens wil doen met zulke dingen is opslaan wat het laatste plaatje was, en bij een reload zorgen dat het niet dezelfde als vorige keer was. Kan heel simpel met een sessie.

Acties:
  • 0 Henk 'm!

Verwijderd

ik verveelde me. dus hier een kant en klaar in elkaar geprakte functie ;)

heel kort genomen:
ronde 1:
hij bepaalt een random seed
gebruikt die seed om de array te shuffelen
haalt een plaatje op een bepaalde positie op.
slaat zowel de seed als het positienummer op.

ronde 2:
de seed is al gezet dus pakt geen nieuwe.
de shuffle gebeurt met de zelfde seed dus de array komt weer in de zelfde 'random' volgorde te staan als rode 1.
hij pakt de volgende positie in de array.

wanneer iemand geen koekjes aan heeft staan zal hij continu random pakken en dus kan hij wel een dubbele krijgen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
session_start();
function getRandomImage()
{
    $images = range(1, 20);
    
    if(!isset($_SESSION['imageseed']))
        $_SESSION['imageseed'] = rand();
        
    if(!isset($_SESSION['imagecounter']) || count($images) <= $_SESSION['imagecounter'])
        $_SESSION['imagecounter'] = 0;
        
        
        
    srand($_SESSION['imageseed']);
    shuffle($images);
    
    $image = $images[$_SESSION['imagecounter']];
    $_SESSION['imagecounter']++;
    
    return $image;
}

echo getRandomImage();

?> 


edit: dit is overigens als hij bij het reloaden een andere image moet tonen. wanneer je tijdens 1 request de images als random wilt weergeven is gewoon een shuffle genoeg. eventueel in combinatie met een static var wanneer je echt maar 1 image per keer wilt geven.

[ Voor 10% gewijzigd door Verwijderd op 25-04-2008 23:50 ]


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

Mijn ongeteste meuk als alle plaatjes op 1 pagina komen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class randomImages
{
    var $images = array();
    
    function __construct()
    {
        if ($handle = @opendir($this->thumbDir))
        {
            // Read all file from the actual directory
            while ($file = readdir($handle))
            {
                if (!is_dir($file))
                {
                        $this->images[] = $file;
                }
            }
            
            shuffle($this->images);
        }
    }
    
    public function getRandomImage()
    {
        return array_shift($this->images);
    }
}
Pagina: 1