Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Lowanie unikalnych liczb ala lotto
Forum PHP.pl > Forum > Przedszkole
arsen99
Witam

Szybkim wstępem napisze tylko, że po 4 latach w końcu na poważnie wziąłem się za nauke php i chyba będę tu częstym gościem smile.gif

Ok problem polega na wylosowaniu 6 niepowtarzalnych liczb z 49. Przedstawie mój sposób rozumowania, a ktoś mam nadzieje powie mi WHY (siedziałem wczoraj do 2 w nocy) to nie działa.


  1. for ($i = 0; $i <= 5; $i++) { //będzie 6 losowań
  2. $j = rand(1, 49); // jakaś pierwsza wylosowana liczba
  3.  
  4. $tablicaliczb[$i] = "$j"; // dla każdego losowania zapamiętujemy wylosowaną liczbę w tablicy aby móc potem porównać z nowo wylosowaną
  5.  
  6. if (in_array($j, $tablicaliczb)) { //sprawdzamy czy w już utworzonej tablicy jest nowo wylosowana liczba
  7. $i--; //jeżeli tam jest juz taka liczba, to odejmuję 1 od cyklu losowania, co spowoduje że losowanie z tym samym indexem się powtórzy
  8. }
  9. else // a jak liczby nie ma w tablicy to ją wyświetl
  10. echo "$j";
  11.  
  12. // print_r($tablicaliczb); oglądamy sobie tablice jeżeli mamy ochotę
  13. echo "<br>";
  14. }



No i co nie działa. Szczególnie podoba mi się warunek, że jak liczba znajduje się w tablicy, to odejmiemy 1 od $i, co spowoduje wrócenie dokładnie do tego samego losowania, bo najpierw odejmiemy jeden a potem doda sie 1, i znowu na przykład jesteśmy w 3 losowaniu.

Jak bym mógł poprosić o wskazanie błędu w tym rozumowaniu, widziałem inne rozwiązania, ale czemu to nie działa? U mnie ciągle wykonuje się "if" tak jak by warunek był ciągle poprawny, tak jak by losował ciągle liczbę która juz była wylosowana wcześniej sad.gif

Dzieki
nospor
$tablicaliczb[$i] = "$j";
if (in_array($j, $tablicaliczb))

Najpiero dodajesz liczbę do tablicy a potem sprawdzasz czy ona w tej tablicy jest a następnie się dziwisz że jest..... brak słów że tak powiem.
wpaski
jeśli chcesz zapamiętać liczbę w tablicy to musisz użyć .=
  1. $tablicaliczb[$i] .= "$j";



//dobra coś mi sie pomieszało tongue.gif
nospor
@wpaski co ty wygadujesz..... zapis do tablicy autor zrobił poprawnie. Pomyliła mu sie jedynie kolejność operacji, o czym wspomniałem dość wyraźnie w poprzednim poście
golaod
To może poinformujmy go już dodatkowo ( i na przyszłość ), że w jego przykładzie przypisywanie przez "$j" jest lekko bezsensowne i zasobożerne.
nospor
Z zasobernością to lekka przesada. Zaś co do bezsensowności to się zgadzam.
arsen99
Hej

Mam w zwyczaju dziękować za pomoc więc to robię.
Faktycznie mimo że patrzyłem na to z 1h to nie widziałem tego że najpierw wprowadzam liczbę w tablicę a potem sprawdzam czy ona tam jest.
Z tym "brakiem słów" mogłeś darować, w każdym razie dzięki, poprawiłem już i działa.
Kiedyś jak będę może biegły, będę widział różne rzeczy to zoptymalizuje, na razie przynajmniej dobrze widzę co się z czego bierze i ćwiczę sobie tworzenie i używanie zmiennych.
Pozdro
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.