Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] losowe obrazki bez powtórzeń
Forum PHP.pl > Forum > Przedszkole
Chrom
Witam,
losuję 5 obrazków funkcją rand z galerii w pętli for,
jak najłatwiej dodać warunek żeby obrazki się nie powtarzały,
lub z jakiej funkcji skorzystać?
melkorm
hm. no okej ale czy zdjęcia trzymasz w tablicy czy gdzie ? snitch.gif troche za mało tych informacji ;] (jak dla mnie ;p)
Chrom
Zdjęcia mam w folderze ponumerowane od 1 do n chodzi o wylosowanie liczb
no_face
Powinno pomoc, na zwrocie dostajesz tablice losowych niepowtarzalnych liczb z zakresu 0 do $z_ilu

  1. <?php
  2. function array_rand_nf($z_ilu, $ile_los)
  3. {
  4.    $t_ile = 0;
  5.  
  6.    for ($aa = 0; $aa < $z_ilu * 3; $aa++)
  7.     {
  8.        $t_w = rand(0, $z_ilu);
  9.        if (@in_array($t_w, $sprawdz)) { continue; }
  10.  
  11.        $sprawdz[] = $t_w;
  12.        $t_ile++;
  13.        
  14.        if ($t_ile >= $ile_los) { break; }
  15.     }
  16.  
  17.    return $sprawdz;
  18. }
  19. ?>
melkorm
  1. <?php
  2. $tab = array();
  3.    $i=1;
  4.  
  5.    while($i <= 5) {
  6.        $temp = mt_rand(1,5);
  7.        if(!in_array($temp,$tab)) {
  8.            $tab[$i] = $temp;
  9.            $i++;
  10.        }
  11.    }
  12. ?>

coś w tym stylu?
no_face
@melkorm - Twoje rozwiazanie ma jeden powazny blad. Istnieje ryzyko zwrocenia mniejszej ilosci pozycji niz 5.
melkorm
Cytat
@melkorm - Twoje rozwiazanie ma jeden powazny blad. Istnieje ryzyko zwrocenia mniejszej ilosci pozycji niz 5.


@no_face , wychodziłem z założenia że liczby są z wiekszego przedziału niż 1-5 ;] Ja napisałem jak to widze w obsługe błędów nie wnikałem, no ale oczywiście masz racje ;]
Chrom
Dzięki za zainteresowanie jednak mam problem

  1. <?php
  2. $z_ilu =30;
  3. $ile_los =5;
  4.  
  5. function array_rand_nf($z_ilu, $ile_los)
  6. {
  7.   $t_ile = 0;
  8.   for ($aa = 0; $aa < $z_ilu * 3; $aa++)
  9.    {
  10.       $t_w = rand(0, $z_ilu);
  11.       if (@in_array($t_w, $sprawdz)) { continue; }
  12.  
  13.       $sprawdz[] = $t_w;
  14.       $t_ile++;
  15.      
  16.       if ($t_ile >= $ile_los) { break; }
  17.        
  18.    }
  19.  
  20.   return $sprawdz;
  21. }
  22.  
  23.  
  24. foreach ($sprawdz as $value) {
  25.   echo "Value: $value<br />\n";
  26. }
  27.  
  28. ?>

Zrobiłem tak ale nic nie wychodzi: gdzie tu jest błąd?
Jeżeli dobrze rozumiem zmienna $sprawdz jest tablicą którą otrzymują z funkcji z losowo wybranymi liczbami jednak nic nie pokazuje.
Ma ktoś pomysła dlaczego?
Cienki1980
Zabrakło Ci wywołania funkcji. $sprawdz jest pustą zmienną bo nigdzie nie nadajesz jej żadnej wartości.
no_face
Jak przedmowca wspomnial, zabraklo Ci wywolania funkcji i przypisania jakiejs zmiennej wartosci przez nia zwracanych.

  1. <?php
  2. $z_ilu = 30;
  3. $ile_los = 5;
  4.  
  5. function array_rand_nf($z_ilu, $ile_los)
  6. {
  7.    $t_ile = 0;
  8.    for ($aa = 0; $aa < $z_ilu * 3; $aa++)
  9.     {
  10.        $t_w = rand(1, $z_ilu);
  11.        if (@in_array($t_w, $sprawdz)) { continue; }
  12.  
  13.        $sprawdz[] = $t_w;
  14.        $t_ile++;
  15.  
  16.        if ($t_ile >= $ile_los) { break; }
  17.  
  18.     }
  19.  
  20.    return $sprawdz;
  21. }
  22.  
  23. $losowe_zdjecia = array_rand_nf($z_ilu, $ile_los);
  24.  
  25. foreach ($losowe_zdjecia as $value)
  26. {
  27.    echo "img src=\"zdj_$value.jpg\"<br />\n";
  28. }
  29. ?>


Aktualnie losuje od 1, a nie od 0 jak to bylo w poprzednim moim poscie - Twoje zalozenie.
rzepski666
<?php
$n = 10;
$numbers = range(1, $n);
shuffle($numbers);
for ($i=0; $i<5; $i++) {
echo $numbers[$i].' ';
}
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.