Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Znowu liczby losowe, tym razem z wykluczeniem liczb z tablicy
uglukha
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 5.05.2008

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


Witajcie,
mam następny problem z losowaniem liczb. Losuję liczbę z przedziału 1 do $ilosc. Chciałbym, aby liczba losowała się od nowa, jeśli wylosowana liczba jest już w $dane.

$dane to ciąg tego typu 4,3,7,21,23

Napisałem na razie tyle, i nie wiem jak to dalej ugryźć

  1. $ilosc = 100
  2. $tablica = explode(",", $dane);
  3.  
  4. $elementy = count($tablica)
  5.  
  6. for( $x = 0; $x < $elementy; $x++ ) {
  7.  
  8. $losuj=rand(1,$ilosc);
  9. //i co dalej
  10.  
  11. }


Będę wdzięczny za nakierowanie,
Pozdrawiam!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Piogola
post
Post #2





Grupa: Zarejestrowani
Postów: 151
Pomógł: 36
Dołączył: 1.02.2011
Skąd: Warszawa

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


Użyj array_rand z drugim parametrem
Go to the top of the page
+Quote Post
uglukha
post
Post #3





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 5.05.2008

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


Chyba nie do końca się zrozumieliśmy (IMG:style_emoticons/default/smile.gif)

Moim celem jest "liczba" $losuj, która to liczba będzie w przedziale od 1 do 100, i nie będzie liczbą 4,3,7,21,23 (akurat w podanym przeze mnie przykładzie)

array_rand z tego co widzę, losuje pozycję z tablicy, i chyba raczej się nie przyda tutaj.
Go to the top of the page
+Quote Post
sadistic_son
post
Post #4





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Rozumiem, że chcesz wylosować jedną liczbę między 1 a np. 100, pod warunkiem, że nie ma jej w tablicy $tablica ,tak?
  1. $ilosc = 100;
  2. $tablica = explode(",", $dane);
  3.  
  4. $elementy = count($tablica);
  5.  
  6. for( $x = 0; $x < 1;) {
  7.  
  8. $losuj=rand(1,$ilosc);
  9.  
  10. if(!in_array($losuj, $tablica){
  11. $x++;
  12. }
  13. }


Ten post edytował sadistic_son 24.02.2011, 20:45:19
Go to the top of the page
+Quote Post
Valdi_B
post
Post #5





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


Co do array_rand z 2-gim parametrem - taka wątpliwość:
Ta funkcja wybierze losową liczbę z tej tablicy.
Sądzę, że chodzi o coś innego: Ta tablica to lista wartości "zakazanych" (które już wylosowano).

Jeżeli tak, to musisz:
1. Po wylosowaniu liczby sprawdzić funkcją in_array, czy ta liczba jest w tablicy "wartości zakazanych".
2. Jeżeli tak, to zostajesz w pętli i losujesz następny raz.
3. Jeżeli nie, to
- dopisz tę liczbę do listy "zakazanych",
- zwróć ją.

Ten post edytował Valdi_B 24.02.2011, 20:50:29
Go to the top of the page
+Quote Post
Piogola
post
Post #6





Grupa: Zarejestrowani
Postów: 151
Pomógł: 36
Dołączył: 1.02.2011
Skąd: Warszawa

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


  1. do {
  2. $losuj = rand(1,10);
  3. } while(in_array($losuj, $tablica));
Go to the top of the page
+Quote Post
sadistic_son
post
Post #7





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Zresztą przecież miałeś już baaardzo podobny temat i otrzymałeś satysfakcjonujące rozwiązania.....
Go to the top of the page
+Quote Post
uglukha
post
Post #8





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 5.05.2008

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


Cytat(sadistic_son @ 24.02.2011, 20:43:48 ) *
Rozumiem, że chcesz wylosować jedną liczbę między 1 a np. 100, pod warunkiem, że nie ma jej w tablicy $tablica ,tak?

Dokładnie o to chodzi! (IMG:style_emoticons/default/smile.gif)
Zaraz przeanalizuje Wasze odpowiedzi, dzięki (IMG:style_emoticons/default/smile.gif)

Cytat(sadistic_son @ 24.02.2011, 20:48:36 ) *
Zresztą przecież miałeś już baaardzo podobny temat i otrzymałeś satysfakcjonujące rozwiązania.....

No tak, ale tam była jedna liczba, a tu jest ich cała masa w tablicy, i nie wiedziałem jak się z tym uporać (IMG:style_emoticons/default/sad.gif)


Ok, dzięki Panowie, rozwiązaniem był in_array, nie znałem tego (IMG:style_emoticons/default/smile.gif)
kod Piogoli działa tak jak chciałem.

Ten post edytował uglukha 24.02.2011, 21:03: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: 23.08.2025 - 22:58