![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.04.2002 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Wlasnie trafilem na problem z ktorym mam bardzo duzy klopot, chodzi mi o to ze mam liczby np: 16,10,9 i do tego mam procentowo ustawione szansy na wylosowanie czyli np 16-30%, 10-30%, 9-40%
i niestety nie wiem jak to zrobic w php. Wymyslilem jedna mozliwosc ze tworze tablice [php:1:9d3e403f50]<?php $tablica[1] = 16; $tablica[2] = 16; $tablica[3] = 16; $tablica[4] = 10; $tablica[5] = 10; $tablica[6] = 9; $tablica[7] = 9; $tablica[8] = 9; $tablica[9] = 9; $tablica[10] = 10; echo $tablica[rand(1,count($tablica))]; // losuje poprostu liczbe z tablicy ?>[/php:1:9d3e403f50] niestety jest to raczej niezbyt dobre rozwiazanie bo jesli liczb bedzie wiecej to tablica bedzie ciagle rosla a wielkosc tego pliku oczywiscie pewnie bedzie miala znaczenie przy szybkosci generowania strony. Mam nadzieje ze ktos ma jakies lepsze roziwazanie i podzieli sie nim ze mna (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Po perwsze zauwaz ze liczba nie moze miec zakresu prawdopodobienstwa wylosowania ( na jedna probe ma jedno prawdopodobienstwo i juz) po drugie suma prawdopodobienstw zawsze jest rowna 100% (1).
Tak wiec twoja tablica z liczbami zawsze bedzie miala 100 elementow jesli prawdopodobienstwo bedziez wyrazal z dokladnoscia do jednego procenta. Podsumowywujac [php:1:651209e6b7]<?php $numbers = ( 16 => 30, 10 => 30, 9 => 40 ); if(array_sum($numbers) != 100){ exit('Nieprawidlowe prawdopodobienstwo.'); } $arr = array(); foreach($numbers as $number => $procent){ $arr = array_merge($arr, array_fill( 0 , $procent, $number)); } // tutaj mozesz jezcze ewentualnie dodac shuffle ale to nie powinno nic zmienic echo $arr[rand(1,100)]; ?>[/php:1:651209e6b7] Pisane od reki wiec gdzies moze byc maly byk. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 22:15 |