Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Losowanie lotto.
Macios25
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 31.07.2011

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


Witajcie.

Próbuje nauczyć się na własną rękę pisać skrypty w php. Zapoznałem się z podstawami jednak nie zawsze wiem czy wykorzystuje zdobytą w najprostszy sposób. Dlatego chciałbym abyście rzucili okiem na mój skrypt losowania lotto
i powiedzieli co mogłem zrobić lepiej i w jaki sposób.

  1. <?php
  2. $zakres = array(1=>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49);
  3. // zakres liczb z jakich ma być losowane 6 cyfr.
  4.  
  5. $wprowadzone="3,9,7,2,22,12";
  6. // Liczby wprowadzone przez użytkownika. ( Muszą one być odzielone odcinkami. )
  7.  
  8. if(!preg_match('#^[0-9,}]+$#ui', $wprowadzone)) {
  9. // tą linijkę kodu ukradłem z innego skryput. Nie mogę zrozumieć wyrażeń warunkowych, nie wiem czy użyłem tej funkcji prawidłowo.
  10. echo("<br>Blad! Musisz podac 6 liczb z zakresu od 1 do 49, odzielonych za pomoca przecinka!<br>");
  11. // W wypadku gdy użytkownik poda niedozwolony ciąg znaków zostanie wyśwetlony komunikat o błędzie.
  12. die();
  13. // Zostanie również wtedy zakończone działanie skryptu.
  14. }
  15.  
  16.  
  17. $wprowadzone =explode(",",$wprowadzone);
  18. // Każda liczba odzielona przecinkiem zostaje osobno przypisana do tablicy wporowadzone.
  19.  
  20.  
  21.  
  22. for ($i = 0; $i<= 5; $i++) {
  23. if ($wprowadzone[$i]>49 or $wprowadzone[$i]<1 ){
  24. echo("Możesz podawać tylko liczby zakresu od 1 do 49!<br>");
  25. die();
  26. }
  27. // Pętla sprawdza czy podane liczby pochodza z zakresu od 1 do 49;
  28.  
  29.  
  30. }
  31.  
  32.  
  33. echo("Wybrane przez Ciebie liczby to: <br>");
  34. for ($i = 0; $i <= 5; $i++) {
  35. echo($wprowadzone[$i]." ");
  36. }
  37. // Wypisuje 6 wybranych przez użytkownika liczb.
  38.  
  39.  
  40.  
  41.  
  42. echo("<br>Wylosowano:<br>");
  43.  
  44. for ($i = 1; $i<= 6; $i++) {
  45. // pętla wykona się 6 razy, za każdym razem wylosuje jedną liczbę i umieści ją w tablicy losuj
  46. $losuj[$i] = array_rand($zakres, 1);
  47. // losuje liczbę z tablicy zakres.
  48. unset($zakres[$losuj[$i]]);
  49. // usuwa wylosowaną liczbę z tablicy zakres - każada liczba ma być unikalna.
  50. echo($losuj[$i]." ");
  51. // Zwaraca wylosowaną liczbę.
  52. }
  53.  
  54.  
  55.  
  56.  
  57.  
  58. $licznik =0;
  59.  
  60.  
  61. for ($i = 0; $i <= 5; $i++) {
  62. if (in_array($wprowadzone[$i], $losuj)) {
  63. $licznik++;
  64. }
  65. }
  66. //Porównuje liczby wylosowane z liczbami podanymi przez użytkownika.
  67.  
  68.  
  69.  
  70. echo ("<br>Trafione: ".$licznik);
  71. // Wyświelta liczbę trafień.
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. ?>
  79.  
  80.  
  81.  


Chyba trochę przesadziłem z komentarzami...

Proszę o sugestie i pozdrawiam
Maciek.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Macios25
post
Post #2





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 31.07.2011

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


Głosiłem jednak herezję z in_array(). Funkcja ta sprawdza czy element znajduje się w tablicy.
Skoro element jest pobierany z tablicy $wpisane, to również w niej musi się znajdować.

Zgodnie z radą kamil4u przejrzałem dokładnie listę funkcji w manualu i znalazłem dosyć ciekawą perełkę.
array_unique(). Usuwa ona duplikaty z tablicy.

Jako, że potem każdy z elementów tablicy jest sprawdzany czy mieści się w przedziale od 1 do 49 zostanie zwrócony fałsz, a działanie skryptu przerwane.

Jako, że dodałem tylko jedno linijkę kodu i zmodyfikowałem echo(), nie wrzucam całego kodu, który jest dostępny wyżej
ponieważ mija się to z celem.


  1. $wprowadzone =explode(",",$wprowadzone);
  2. // Każda liczba odzielona przecinkiem zostaje osobno przypisana do tablicy wporowadzone.
  3.  
  4.  
  5.  
  6. $wprowadzone = array_unique($wprowadzone);
  7. // Funkcja array_unique usuwa z tablicy powtórzenia.
  8.  
  9.  
  10.  
  11.  
  12. for ($i = 0; $i<= 5; $i++) {
  13. if ($wprowadzone[$i]>49 || $wprowadzone[$i]<1 ){
  14. die("Możesz podawać tylko liczby zakresu od 1 do 49!<br>Liczby nie mogą się powtarzać.");
  15. }
  16. // Jeśli liczba jest mniejsza 1 lub większa od 49 lub została usunięta ze względu na powtórzenia zostaje wyświetlony stosowny komunikat.



Przy użyciu generowania tablic, z której ma być losowana cyfra przy użyciu funkcji range() dzieje się u mnie na serwerze
dosyć dziwna rzecz. Pomimo, że zakres jest ustawiony od 1,49 to czasami w losowaniu potem z tej tablicy jest wyciągnięte 0. Ciekawe. (IMG:style_emoticons/default/smile.gif)

Udało mi się z Waszą pomocą ulepszyć ten skrypt. Jednak nie myliłem się co do tego, że potrzebuje jakichś mentorów,
którzy będą mi pokazywali błędy. Teraz spróbuje napisać coś większego, może jakiś system logowania. (IMG:style_emoticons/default/wink.gif)
Tylko muszę się dokształcić z wyrażeń regularnych i obsługi sesji.
Jeśli uda mi się stworzyć coś sensownego to wrzucę abyście wskazali mi błędy.

Jeszcze raz dziękuje za pomoc i zainteresowanie. (IMG:style_emoticons/default/smile.gif)


Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 22:56