Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] range(1,49)
Forum PHP.pl > Forum > Przedszkole
sebus79
Witam.

Prosty skrypt, wprawdzie z kursu, ale też bym pewnie dał już radę.

Zauważyłem jednak pewną nieścisłość.
Funkcja range(1,49) losuje cyfry z przedziału między 1 a 49 bez powtórzeń (to fajna zaleta).

Jednak jak tak sobie polosuję klika razy to okazuje się, iż co jakiś czas najniższą cyfrę jaką mi wylosuje to... to 0.
Nawet jak zmieniłem zakres na range(2,49) także co jakiś czas najniższą cyfrę wylosuje mi 0. Hmmm...

Czy coś nie tak jest ze skryptem?
Czy może range jest inaczej zdefiniowane?


  1. <?php
  2.  
  3. $liczby=range(1,49);
  4. $wylosowane = array_rand($liczby,6); //array_rand losuje bez powtórzeń
  5.  
  6. echo("Wylosowane liczby to: ".implode(',',$wylosowane));
  7.  
  8. ?>



Pozdrawiam.
dżozef
range nic nie losuje, tylko zwraca tablice z wszystkimi elementami pomiedzy danymi wartosciami
http://ie1.php.net/range
sebus79
Cytat(dżozef @ 22.06.2013, 23:36:25 ) *
range nic nie losuje, tylko zwraca tablice z wszystkimi elementami pomiedzy danymi wartosciami
http://ie1.php.net/range


No tak, zapędziłem się :-) Tak mają początkujący.

Jednakże nie zmienia to faktu, iż nie powienien mi wyświetlać cyfry 0. Przecież nie ma jej wśród elementów.



Pozdrawiam.
mstraczkowski
Źródłem twojego problemu jest funkcja array_rand, a nie range

W dokumentacji możemy przeczytać:

Cytat
If you are picking only one entry, array_rand() returns the key for a random entry. Otherwise, it returns an array of keys for the random entries.

Zaznaczyłem najważniejsze zdanie, które powinno Ci rozświetlić co się dzieje.
Po prostu zwracana jest tablica KLUCZY, a nie wartości - z stąd twoje "0"

Jeżeli chcemy tutaj użyć array_rand
To możemy to zadanie wykonać na przykład w poniższy sposób:

  1. $numberArray = range(1, 49);
  2. $randomKeys = array_rand($numberArray, 6);
  3. $random = array();
  4.  
  5. foreach ($randomKeys as $key) {
  6. $random[] = $numberArray[$key];
  7. }
  8.  
  9. echo 'Wylosowane liczby to: '.implode(',', $random);

Można także rozwiązać to zadanie za pomocą funkcji mt_rand
Za pomocą odpowiedniej pętli i warunku uwzględniam to, że liczby nie mogą się powtarzać

  1. $min = 1;
  2. $max = 49;
  3. $count = 6;
  4. $numbers = array();
  5.  
  6. while (count($numbers) < $count) {
  7. $randomNum = mt_rand($min, $max);
  8.  
  9. if (!in_array($randomNum, $numbers)) {
  10. $numbers[] = $randomNum;
  11. }
  12. }
  13.  
  14. echo 'Wylosowane liczby to: '.implode(',', $numbers);
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.