Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z rand(); - nie losuje
SarnaMC
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 20.10.2013

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


Witam. Piszę coś w stylu lotto dla mojej strony ( konkurs). Wszystko mi pięknie działało dopóki nie zacząłem pisać losowania liczb. Znalazłem na necie rand() ale ona sie dziwnie zachowuje. Oto plik class:
  1. <?php
  2.  
  3. class lotto
  4. {
  5. function generowanie()
  6. {
  7. $liczba1 = rand(1, 40);
  8. $liczba2 = rand(1, 40);
  9. $liczba3 = rand(1, 40);
  10. $liczba4 = rand(1, 40);
  11. $liczba5 = rand(1, 40);
  12. echo rand(0, 40);
  13.  
  14. }}
  15. ?>

i teraz plik index:
  1. $lotto->generowanie();
  2. echo "$liczba1 $liczba2 $liczba3 $liczba4 $liczba5 test ";


Jedyne co mi się wyświetla to to ostatnie rand które dałem już w echo oraz napis test. Nie wiem czemu tak się dzieje, pomożecie?

#EDIT
hmmm przemyślałem to i widzę że powinienem chyba użyć return w pliku class, tylko że po dopisaniu return $liczba1; dalej to nie działa

Ten post edytował SarnaMC 28.05.2014, 11:59:00
Go to the top of the page
+Quote Post
IProSoft
post
Post #2





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Nowe:
  1. class lotto
  2. {
  3. public $rands = array();
  4. function generowanie()
  5. {
  6. $this->rands = array_map(
  7. function ($value) {
  8. return rand( 0, 40 );
  9. },
  10. range(1, 10)
  11. );
  12. }
  13. }
  14.  
  15. $lotto = new lotto();
  16. $lotto->generowanie();
  17.  
  18. echo implode( ' ', $lotto->rands );


albo w swoim w funkcji musisz zwrócic:

  1. return "$liczba1 $liczba2 $liczba3 $liczba4 $liczba5";
Go to the top of the page
+Quote Post
kreatiff
post
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


Jeśli lotto ma być bez powtórzeń, to musisz to inaczej zbudować, bo w obu powyższych przypadkach mogą wystąpić powtórzenia.
Ja to zawsze robię tak:
  1. $a = range(1,40);
  2. shuffle($a);
  3. // i wybieram sobie pierwsze x elementów tablicy, gdzie x to ilość potrzebnych liczb

ale to na własny użytek, nie produkcyjny.

Jak zbiór, z którego losujemy jest ogromny*, to lepiej losować i sprawdzać, czy dana wartość już padła i jeśli tak, to ponowić losowanie.
* wszystko sprowadza się do optymalizacji

Ten post edytował kreatiff 28.05.2014, 12:52:46
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: 22.08.2025 - 15:16