Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pocent szans na wylosowanie liczby
MakS
post
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)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Majdan
post
Post #2





Grupa: Zarejestrowani
Postów: 445
Pomógł: 0
Dołączył: 21.12.2003
Skąd: Tomaszów Lubelski

Ostrzeżenie: (10%)
X----


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:
Go to the top of the page
+Quote Post
MakS
post
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)
Go to the top of the page
+Quote Post
rzseattle
post
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.
Go to the top of the page
+Quote Post
MakS
post
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
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 - 09:02