Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie bez zwracania
Forum PHP.pl > Forum > Przedszkole
Aspire
Witam, chcę sobie wylosować 6 liczb (bez zwracania) z 49 - lotek wink.gif
Napisałem taki skrypt:
  1. <?php
  2. $start = microtime(true);
  3. function losuj()
  4. {
  5. $t = range(1,49);
  6. $w = array_rand($t,6);
  7. foreach ($w as $l) { echo $l." "; }
  8. }
  9. for($i=1;$i<=10;$i++) { echo $i.") "; losuj(); echo "\n<br />"; }
  10. echo "<hr>";
  11. echo 'Czas generowania strony: ' . round(microtime(true) - $start, 3).'s';
  12. ?>

ale pomimo ustawienia zakresu od 1 do 49 często dostaję 0.
Np:
0 13 15 22 19 30
Dodam, że nie zauważyłem, żeby któraś z wylosowanych liczby wykraczała poza 49. Dlaczego tak się dzieje? Z góry dzięki wink.gif
Ustawienie range(2,50) też nic nie daje ;/
Crozin
array_rand zwraca losowe klucze, nie wartości z tablicy.
Aspire
A jak wylosować 6 liczb z zakresu 1-49?
Znalazłem taki skrypt:
  1. $tab = array(1,2,3,4,5,6,7,8,9,
  2. 10,11,12,13,14,15,16,17,18,19,20);
  3. $wynik = array();
  4. for($i=0;$i<10;$i++)
  5. {
  6. $lntab = count($tab)-1; /*zapisujemy długość tablicy - 1 ponieważ tablica
  7.   jest indeksowana domyślnie od 0, a count liczy od 1*/
  8. $r = mt_rand(0,$lntab); /*zapisujemy losową liczbę*/
  9. $wynik[] = $tab[$r]; /*dodajemy do tablicy wynikowej */
  10. $tab[$r] = $tab[$lntab]; /*w wylosowane miejsce przypisujemy
  11.   ostatni element z tablicy*/
  12. unset($tab[$lntab]); /*usuwamy ostatni element*/
  13. }
  14. sort($wynik); /*sortujemy*/
  15. print_r($wynik); /*wyrzucamy na ekran*/


Działa, ale chciałbym to zrobić bardziej "po mojemu".
sajegib
ale co tu do robienia po twojemu? Możesz ten efekt osiągnąć na wiele sposobów, ale chodzi chyba o to, żeby działało?

  1. $tab = range(1,49); // ---> tutaj ustalasz liczby 1-49
  2. $wynik = array();
  3. for($i=0;$i<10;$i++)
  4. {
  5. $lntab = count($tab)-1; /*zapisujemy długość tablicy - 1 ponieważ tablica
  6.   jest indeksowana domyślnie od 0, a count liczy od 1*/
  7. $r = mt_rand(0,$lntab); /*zapisujemy losową liczbę*/
  8. $wynik[] = $tab[$r]; /*dodajemy do tablicy wynikowej */
  9. $tab[$r] = $tab[$lntab]; /*w wylosowane miejsce przypisujemy
  10.   ostatni element z tablicy*/
  11. unset($tab[$lntab]); /*usuwamy ostatni element*/
  12. }
  13. sort($wynik); /*sortujemy*/
  14. print_r($wynik); /*wyrzucamy na ekran*/
  15.  
lobopol
array_rand na tablicy 50 elementowej rangem zrobionej z usuniętym 0 kluczem
Aspire
@lobopol dzięki, teraz działa jak trzeba wink.gif
  1. <?php
  2. $start = microtime(true);
  3. function losuj()
  4. {
  5. $t = range(1,50);
  6. unset($t[0]);
  7. $w = array_rand($t,6);
  8. foreach ($w as $l) { echo $l." "; }
  9. }
  10. for($i=1;$i<=100;$i++) { echo $i.") "; losuj(); echo "\n<br />"; }
  11. echo "<hr>";
  12. echo 'Czas generowania strony: ' . round(microtime(true) - $start, 3).'s';
  13. ?>
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.