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
rzseattle
post
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.
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: 4.10.2025 - 22:15