Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie liczby bez powtórzeń
Forum PHP.pl > Forum > Przedszkole
DukaN
Witam,

Mam pytanie a zarazem problem. Chcę stworzyć skrypt, który będzie mi losował liczbę od 1 do 5. Niestety wylosowane liczby nie mogą się powtarzać, tzn wylosuje 4 i przez kolejne 5 losowań nie może ona się powtórzyć, po 5 losowaniach "restart" losowania i od nowa. Myślałem żeby to zrobić za pomocą rand() i sesji, no i przy zapisie liczb do sesji utknąłem. Pomoże ktoś?

Pozdrawiam

//EDIT
Nie musi to być zapis do sesji.

//EDIT2
Znajomy stworzył taki kod:
  1. <?php
  2. if(!isset($_SESSION["randed"]))
  3. $_SESSION["randed"] = "";
  4.  
  5. $tabl = explode("|", $_SESSION["randed"]);
  6. $min = 1;
  7. $max = 5;
  8.  
  9.  
  10.  
  11. //wylosowalismy juz wszystkie liczby, zerujemy
  12. if(count($tabl) == $max - $min + 2)
  13. {
  14. $_SESSION["randed"] = "";
  15. $tabl = array();
  16. }
  17.  
  18. function AlreadyRanded($tabl, $num)
  19. {
  20. for($i = 0; $i < count($tabl); $i++)
  21. if($tabl[$i] == $num)
  22. return true;
  23.  
  24. return false;
  25. }
  26. //losujemy
  27. do
  28. {
  29. $randed = rand($min, $max);
  30.  
  31. } while(AlreadyRanded($tabl, $randed));
  32.  
  33.  
  34. if($randed == 1){
  35. echo "";
  36. }
  37. else{
  38. echo $randed;
  39. }
  40. //dodaj ją do sesji
  41. $_SESSION["randed"] .="|$randed";
  42. }
  43. ?>


Polega na tym, że jak już skończy losować serię i ostatnia liczba to np 4, to żeby zaczynając od nowa to następna (pierwsza) liczba musi być różna od ostatniej, czyli w tym przypadku 4
Wazniak96
  1. <?php
  2.  
  3. $liczby = unserialize($_SESSION['liczby']);
  4. if(count($liczby) == 5)
  5. $liczby = array();
  6.  
  7. $liczba = rand(1, 5);
  8.  
  9. while(in_array($liczba, $liczby))
  10. {
  11. $liczba = rand(1, 5);
  12. }
  13.  
  14. $liczby[] = $liczba;
  15.  
  16. $_SESSION['liczby'] = serialize($liczby);
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.