![]() |
![]() |
![]()
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: Zarejestrowani Postów: 445 Pomógł: 0 Dołączył: 21.12.2003 Skąd: Tomaszów Lubelski Ostrzeżenie: (10%) ![]() ![]() |
O to chodzi?
[php:1:e935bc5df2]<?php $zm = rand(1,100); if ($zm > 16 && $zm < 30) { //skrypt } ?>[/php:1:e935bc5df2] Jest dokładnie 14%, że wylosuje ją z tego zakresu. :wink: |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.04.2002 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Wsumie tak, tak tez mozna zrobic, ale to jest dosc duzy problem jak sie ma nie 3 liczby tylko np 30 bo wtedy musisz policzyc sobie i wypisac 30 intrukcji warunkowych co jest troche uciazliwe, albo co gorsza jak trzeba wywlac ta funkcje losujaca pare razy w calym skrypcie z roznymi szansami procentowymi.
Ale dzieki za checi i pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#4
|
|
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. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.04.2002 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Ad popierwsze rozumiem, masz racje, ale przynajmniej dobrze mnie zrozumiales (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) bo walsnie o cos takiego mi chodzilo,a kodzie wkradl sie malutki blad
[php:1:b706453547]<?php $numbers = array ( 16 => 30, 10 => 30, 9 => 40 ); ?>[/php:1:b706453547] Dzieki za pomoc |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 09:02 |