我有以下脚本:在阵列PHP随机值ponderated
$domain = ['gmail.com', 'yahoo.com', 'hotmail.com'];
$domain = $domain[mt_rand(0, count($domain) - 1)];
,能够设定对每个项目coresponding到被选择的机会一个百分比值。例如,我想有75%的机会拥有$ domain ='gmail.com';.
我有以下脚本:在阵列PHP随机值ponderated
$domain = ['gmail.com', 'yahoo.com', 'hotmail.com'];
$domain = $domain[mt_rand(0, count($domain) - 1)];
,能够设定对每个项目coresponding到被选择的机会一个百分比值。例如,我想有75%的机会拥有$ domain ='gmail.com';.
有很多方法可以达到预期的效果。
我的方法并不要求总“机会”是100;你可以自己决定最高钥匙的价值。
我的方法的基础是结果($domain
)将是最小的密钥不大于随机数($pick
)的数组值。
下面是一个给gmail 75%的机会,并给予其余25%的机会的机会。
*请注意,mt_rand()
从1开始,而0在问题下评论。
$domain_perc=array(
750=>'gmail.com', // between 1 & 750 = 75% chance
875=>'yahoo.com', // between 751 & 875 = 12.5% chance
1000=>'hotmail.com' // between 876 & 1000 = 12.5% chance
);
$pick=mt_rand(1,max(array_keys($domain_perc)));
foreach($domain_perc as $p=>$v){
if($pick<=$p){
$domain=$v;
break;
}
}
或者也可以与此一衬垫更换foreach()
代码块:
$domain=current(array_filter($domain_perc,function($v,$k)use($pick){return $pick<=$k;},ARRAY_FILTER_USE_BOTH));
作为用于定制输入阵列,表达为50%-25%-25%分割的一个简单的方法将是:
$domain_perc=array(
2=>'gmail.com', // 1 and 2 of 4 = 50% chance
3=>'yahoo.com', // 3 of 4 = 25% chance
4=>'hotmail.com' // 4 of 4 = 25% chance
);
要设置一个两值阵列与〜33%〜航班吗66%分割:
$domain_perc=array(
1=>'gmail.com', // 1 of 3 = ~33% chance
3=>'yahoo.com' // 2 & 3 of 3 = ~66% chance
);
对不起,我迟到的回应。感谢您的答复! –
'$ i = mt_rand(0,100); if($ i <75)$ domain = $ domain [0];' – splash58
它使用Mersenne Twister算法。如果你需要定制一个,你为什么不创建一个? – Thamilan
$ domain = ['gmail.com','gmail.com','gmail.com','gmail.com','yahoo.com','hotmail.com']; 4:2现在有更多机会获得gmail。只是一个棘手的不正确的方式。 –