Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Losowanie liczby, Losowanie jednej liczby z puli liczb bez powtarzania się
erder
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 15.05.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
bostaf
post
Post #2





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 16:14