Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie liczb
Forum PHP.pl > Forum > Przedszkole
Lirdoner
Witam, jak zrobić aby do zmiennej przypasowano losową liczbę od 0 do 11?
vokiel
Przeczytać manual: rand
Lirdoner
Ok mam takie coś
$indeks = rand(0,11);

I jak teraz zrobić, żeby losował bez 5?
Marcuez
$index = rand(0,11);
if ($index = 5)
losuj dalej
else
wyświetl
vokiel
Sprawdzać wynik losowania, jeśli równy 5 losować jeszcze raz. Tak w pętli, funkcja wywołująca samą siebie, jeśli wynik losowania nie jest pożądany.
Lirdoner
A jeżeli mam tak
  1. <?php echo $lekcja[rand(0,11)] ?>
  2. <?php echo $lekcja[rand(0,11)] ?>
  3. <?php echo $lekcja[rand(0,11)] ?>

Będą 3 razy losowane indeksy tablicy $lekcja i np. jeżeli w 1 indeks będzie wynosił 5 to żeby w następnych już 5 pomijało, jak to zrobić?
thomson89
  1. $jeden = rand(0,11);
  2. $dwa = rand(0,11);
  3. $trzy = rand(0,11);
  4. if($jeden == 5){
  5. while($dwa != 5){
  6. $dwa = rand(0,11)
  7. }
  8. }
  9. if($dwa == 5){
  10. while($trzy != 5){
  11. $trzy = rand(0,11)
  12. }
  13. }
  14.  
  15. echo $lekcja[$jeden];
  16. echo $lekcja[$dwa];
  17. echo $lekcja[$trzy];
r4xz
if($jeden = 5){
if($dwa = 5){


mały, ale uciążliwy błąd, powinno być == winksmiley.jpg

thomson89
No tak. Sorry... wstydnis.gif
darko
  1. function myrand($min = 1, $max = 11) {
  2. $tmp = rand($min, $max);
  3. while($tmp == 5) {
  4. $tmp = rand($min, $max);
  5. }
  6. return $tmp;
  7. }
  8.  
  9. $lekcja = range(0,11);
  10. echo $lekcja[myrand()]."<br/>".$lekcja[myrand()]."<br/>".$lekcja[myrand()];
Wicepsik
thomson89 dziwne kody robisz. Jak będzie chciał więcej o jeden to znów dodasz ifa? smile.gif

  1. $array = array(); // Liczby
  2. do{
  3. $rand = rand(0,11); // Losowanie
  4. if(!in_array($rand, $array) and $rand != 5){ // Instrukcja warunkowa sprwadza czy nie istnieje już liczba w tablicy i czy nie jest to 5
  5. $array[] = $rand; // Dodawanie
  6. }
  7. }while(count($array) < 3); // Pętla wykonuje się dopóki nie będą 3 wartości w tablicy
darko
Albo jeszcze krócej:

  1. $mr = create_function('$min=1,$max=11','$tmp = rand($min, $max);while($tmp == 5) {$tmp = rand($min, $max);} return $tmp;');
  2. // tylko dla testu:
  3. $lekcja = range(0,11);
  4. //
  5. echo $lekcja[$mr()]."<br/>".$lekcja[$mr()]."<br/>".$lekcja[$mr()];
MateuszS
Jak chcesz zrobic totolotka to masz tu gotowy skrypt mojej roboty, losuje ile chcesz liczb z jakiego chcesz przedzialu

  1. <?
  2.  
  3. $od=1;
  4. $do=46;
  5. $ile=6; //ile liczb losuje
  6. $warunek=false;
  7. $tablica=array();
  8. $i=1;
  9. if(($do-$od)>=$ile-1) {
  10. while($i<=$ile) {
  11. if($i==1) {
  12. $tablica[$i]=rand($od,$do);
  13. } else {
  14. while($warunek==false) {
  15. $los=rand($od,$do);
  16. if(!in_array($los,$tablica)) {
  17. $tablica[$i]=$los;
  18. $warunek=true;
  19. }
  20. }
  21. }
  22. echo $tablica[$i].',';
  23. $warunek=false;
  24. $i++;
  25. }
  26. } else {
  27. echo 'Za mały przedział ('.$od.' do '.$do.') dla liczby losowanych liczb ('.$ile.')';
  28. }
  29.  
  30. ?>
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.