Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie liczby
Forum PHP.pl > Forum > Przedszkole
erder
Witam,

męczę się z tematem od kilku dni i nie mogę sobie poradzić..

jak wylosować pojedynczą liczbę z danej puli tak aby ta liczba się nie powtarzała?

Potrzebuje to do losowania pytania:
$pytanie=rand(0,$ile_dane-1); // to losuje liczbę ale ona się powtarza

funkcja zostanie wywołana kiedy użytkownik wyśle formularz z typem radio,


Próbowałem zrobić ta za pomocą sesji w której zapisuje się wylosowana liczba ale i tak liczby się powtarzały.

  1.  
  2. // tablica z liczbami
  3. $aPytanie = array (0,1,2,3,4,5,6,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
  4.  
  5.  
  6.  
  7. if (!isset ($_SESSION['wylosowany_numer_pamiec'])) $_SESSION['wylosowany_numer_pamiec'] = array ();
  8.  
  9. $iPytanie = count ($aPytanie);
  10. $bClear = false;
  11.  
  12. // Losowanie bez powtórzeń
  13. do {
  14. $iLos = rand (0, $iPytanie-1);
  15. if (count ($_SESSION['wylosowany_numer_pamiec']) == $iPytanie) {
  16. $_SESSION['wylosowany_numer_pamiec'] = array (); // Zerujemy magazyn losów
  17. $bClear = true;
  18. }
  19. } while (in_array ($iLos, $_SESSION['wylosowany_numer_pamiec']));
  20. $_SESSION['wylosowany_numer_pamiec'][] = $iLos;
  21. echo '<span>Numer:</span> '.$aPytanie[$iLos].'</p>';


Znalazłem gdzieś, że można to zrobić za pomocą tablicy oraz pętli:

1.wylosowana liczba zapisuję się do tablicy
2. losowanie następnej liczby
3. sprawdzenie czy wylosowana liczba znajduje się w tablicy liczb wylosowanych
4. jeśli nie dodaje liczbę do tablicy i zapisuje ją do zmiennej, jeśli tak losuje dalej

Nie potrafię niestety przełożyć tego na kod.
bostaf
Zapisz sobie poniższy skrypt w osobnym pliku, uruchamiaj, dawaj refresh w przeglądarce i przeanalizuj działanie. Jak czegoś nie będziesz rozumiał to daj znać. Jutro znów tu zajrzę.
  1. <?php
  2. // losowanie.php
  3. header("Content-type: text/html; charset=utf-8");
  4. $aPytanie = array ('pierwsze - indeks zero',1,2,3,4,5,6,4,7,'numer osiem',9,10,11,12,13,14,15,16,'seventeen',18,19,20);
  5. if(!isset($_SESSION['pytania']))
  6. $_SESSION['pytania'] = $aPytanie;
  7. $tablica_robocza = $_SESSION['pytania'];
  8. if(empty($tablica_robocza)) {
  9. echo '<h1>Pula pusta. Odśwież stronę żeby wypełnić pulę od nowa.</h1>';
  10. unset($_SESSION['pytania']);
  11. die();
  12. }
  13. $indeks_wylosowanego_pytania = array_rand($tablica_robocza);
  14. $wylosowane_pytanie = $tablica_robocza[$indeks_wylosowanego_pytania];
  15. unset($tablica_robocza[$indeks_wylosowanego_pytania]);
  16. $_SESSION['pytania'] = $tablica_robocza;
  17. echo 'Wylosowane pytanie: ' . $wylosowane_pytanie;
  18. ?>
  19. <pre>
  20. <?php var_dump($tablica_robocza); ?>
  21. </pre>
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.