从数组中创建一个随机值,其中最多选择的值为1

时间:2012-01-15 04:10:39

标签: php

如何从数组中获取随机值,在数组中设置一个比其他选择更多的值?

array('00','01','02');

我想从这个数组中选择一个最大选择值为'00'的随机值,即'00'值将被选为80%,其他两个值将是20%。

这里的数组可以有很多值,它只是一个带有三个值的例子

4 个答案:

答案 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)];