Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Losowanie wagowe w procentach, gdzie każda wartość ma swój procent..
Giluś
post
Post #1





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Hej, potrzebuję zrobić losowanie wagowe.. posiadam takie wartości:

Kod
0.1 = 70%
0.2 = 70%
0.3 = 70%
0.4 = 70%
0.5 = 70%
0.6 = 50%
0.7 = 50%
0.8 = 50%
0.9 = 50%
1.0 = 50%
1.1 = 30%
1.2 = 30%
1.3 = 30%
1.4 = 30%
1.5 = 10%
1.6 = 10%
1.7 = 10%
1.8 = 5%
1.9 = 5%
2.0 = 5%


Znalazłem coś takiego do losowania liczb z przecinkiem:

  1. $min=0.1;
  2. $max=2.0;
  3. $liczba=rand(pow(10,1)*$min,pow(10,1)*$max)/pow(10,1);
  4. echo $liczba;


Ale teraz jak wylosować daną liczbę z odpowiednią jej "wagą" ?


Pozdrawiam i z góry bardzo dziękuje za pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Po prostu przed losowaniem trzeba wykryć czy count($tablica) > 0 i tam w ogóle był błąd ($tablicaLiczb => $tablica) sorki że nie zauważyłem powinno być:

  1. $tablicaLiczb = array();
  2. $tablicaLiczb['0.1'] = 70;
  3. $tablicaLiczb['0.6'] = 50;
  4. $tablicaLiczb['2.0'] = 5;
  5. // itd...
  6.  
  7. $tablica = array();
  8. $ostatniaLiczba = 0;
  9.  
  10. foreach($tablicaLiczb AS $liczba => $waga) { // dla każdej liczby do wylosowania
  11. for($i = 0; $i < $waga; $i++) { // generujemy liczby w ilości równej wadze liczby
  12. $tablica [$ostatniaLiczba++] = $liczba;
  13. }
  14. }
  15.  
  16. if(count($tablica)) {
  17. echo $tablica[mt_rand(0,$ostatniaLiczba-1)]; // losujemy liczbę z zakresu wygenerowanych liczb i zwracamy rekord tablicy pod tą liczbą zawierający naszą szukaną liczbę
  18. } else {
  19. echo '0.0';
  20. }
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: 13.10.2025 - 11:23