如何从数组中获取随机值,在数组中设置一个比其他选择更多的值?
array('00','01','02');
我想从这个数组中选择一个最大选择值为'00'的随机值,即'00'值将被选为80%,其他两个值将是20%。
这里的数组可以有很多值,它只是一个带有三个值的例子
答案 0 :(得分:2)
$main_array=array('00','01','02');
$priority=array(0,0,0,0,0,0,0,0,1,2);
$rand_index=array_rand($priority);//select a random index from priority array.. $priority[$rand_index] will give you index 0 or 1 or 2 with your priority set..
echo $main_array[$priority[$rand_index]];
我认为代码是自我解释的......
数组将有很多元素 案例将会出现,当我们说要求将达到“00”28%概率的3%概率时。 “01”休息到其他元素...在这种情况下使用array_fill函数来填充质量中的元素...和array_merge它们
对于同样的情况,我已经回答了
$main_array=array('00','01','02');
$priority1=array_fill(0,69,2);
$priority2=array_fill(0,28,1);
$priority3=array_fill(0,3,0);
$priority=array_merge($priority1,$priority2,$priority3);
$rand_index=array_rand($priority);
echo $main_array[$priority[$rand_index]];
答案 1 :(得分:0)
使用具有概率分布的并行数组,例如:
array('80', '10', '10');
使用标准随机数函数生成0到99之间的数字,然后在此数组中查找。然后,您在其中找到的索引将用作值数组的索引。
答案 2 :(得分:0)
这是一个想法。
$arr = array('00', '01', '02');
$randInt = rand(1, 10);
if ($randInt <= 8) {
$value = $arr[0];
}
else if ($randInt == 9) {
$value = $arr[1];
}
else { // ($randInt == 10)
$value = $arr[2];
}
现在有80%的可能性$value
包含'00',10%的几率包含'01',10%的几率包含'02'。这可能不是最有效的解决方案,但它会起作用。
答案 3 :(得分:0)
众多选项之一
$a = array_fill(0, 8, '0');
$a['9']='1';
$a['10']='2';
echo $a[array_rand($a,1)];