Reputation: 7475
i have the following array:
public $percentage = array(
0 => 20.30,
1=> 19.96,
2=> 14.15,
3=> 45.59
);
// it sums in 100%
I need a random function to return the key by the percentage of the value,
for example: the possibility to get 0 is 20.30% and the possibility to get 2 is 14.15%, the first user got 0, the second one got 2.
Please let me know what is the function you suggest me to use.
Upvotes: 4
Views: 857
Reputation: 15106
Convert the percentages to an accumulated probability, then compare it with a random number.
If the random number falls into a category, outputs the result. If not, move onto the next one until one is found. This allows you to output a number based on the percentage probability stated in the array.
$percentage = array(
0 => 20.30,
1=> 19.96,
2=> 14.15,
3=> 45.59
);
$random = mt_rand(0,10000)/100;
foreach ($percentage as $key => $value) {
$accumulate += $value;
if ($random <= $accumulate) {
echo $key;
break;
}
}
Upvotes: 7
Reputation: 2761
$random_n = mt_rand(0,10000)/100;
while(true){
if($random_n <= $percentage[0])
echo 0; break;
else if($random_n <= $percentage[1])
echo 1; break;
else if($random_n <= $percentage[2])
echo 2; break;
else if($random_n <= $percentage[3])
echo 3; break;
else
$random_n = mt_rand(0,10000)/100; //generate a new random #
}
Upvotes: 2
Reputation: 3484
<?php
$percentage = $tmp = array(
0 => 20.30,
1=> 19.96,
2=> 14.15,
3=> 45.59
);
sort($tmp);
$rand = mt_rand(0,100);
foreach($tmp as $percent) {
if($percent >= $rand) {
echo array_search($percent,$percentage);
die();
}
}
echo (count($percentage) - 1);
Upvotes: 1
Reputation: 6258
I'd do something like:
Upvotes: 0