Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] range(1,49), Czy (1,49) to faktyczny przedział?
sebus79
post 22.06.2013, 21:47:53
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 22.06.2013
Skąd: Łódź

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


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.
Go to the top of the page
+Quote Post
dżozef
post 22.06.2013, 22:36:25
Post #2





Grupa: Zarejestrowani
Postów: 125
Pomógł: 9
Dołączył: 25.05.2013

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


range nic nie losuje, tylko zwraca tablice z wszystkimi elementami pomiedzy danymi wartosciami
http://ie1.php.net/range


--------------------
Go to the top of the page
+Quote Post
sebus79
post 22.06.2013, 22:38:40
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 22.06.2013
Skąd: Łódź

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


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.
Go to the top of the page
+Quote Post
mstraczkowski
post 23.06.2013, 02:00:23
Post #4





Grupa: Zarejestrowani
Postów: 273
Pomógł: 52
Dołączył: 3.02.2013
Skąd: Przemyśl

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


Ź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);


Ten post edytował mstraczkowski 23.06.2013, 02:32:27


--------------------
Jeżeli moja wypowiedź Ci pomogła użyj przycisku
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 17:34