PHP 如何控制随机值

$arrTurn=array(18,54,80,110,170,198,234,270,306,302);if($_POST['act']=='turnPlate'){$... $arrTurn = array(18,54,80,110,170,198,234,270,306,302);
if ( $_POST['act'] == 'turnPlate') {
$key = rand(0,9);
$jl = $arrTurn[$key];

目前是随机18 54等数据,我现在想控制一下 18这个值出现的几率达到80% ,302这个数值出现的几率只有5% 因该怎么写?
展开
 我来答
小强19881110
2013-07-12 · TA获得超过238个赞
知道小有建树答主
回答量:468
采纳率:100%
帮助的人:238万
展开全部
你只要提前把数组里的 302 和18 的个数直接弄成对应 的百分百就得了嘛
你想18是80% 就在10个数字里 放8个18 不就是80%了 哈哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ffcz
2013-07-12 · TA获得超过1221个赞
知道小有建树答主
回答量:757
采纳率:71%
帮助的人:778万
展开全部
太简单了。兄弟们都不好回答。至少加多几句描述一下你的需求嘛。
随机值的获取方式太多了,各次适合略不同。比如验证码,唯一值,干扰码,混淆等。
追问
我补充过了,你看看
追答
给你一个思路:先把基本的随机数,按比例生成多几个,放在一个数组再来rand一下。
比如你原先是 1,2, 3,4,5。再生成 1,1,1,2,2,3,4,5,这个rand出来的结果,1是3/8,约40%。2是2/8,约25%。
大概思路,精简的机率,你再想想。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
破玩意真难取
2013-07-12 · 超过30用户采纳过TA的回答
知道答主
回答量:109
采纳率:100%
帮助的人:68万
展开全部
建议那么写
array(18,18,18,18,302,1,2,3);

然后随机从数组取值 这样应该符合你的要求吧
更多追问追答
追问
这样似乎不太好吧。。。
追答
$rand = 0; // 定义rank随机变量
if(mt_rand(1,100) <= 80) {
出现80
}

其他的类似 也可以这么做
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhongks
2013-07-12
知道答主
回答量:19
采纳率:0%
帮助的人:15.1万
展开全部
//可以通过放大数组的方式实现。把每个数值都放大到具体的比例;比如 6个1总是比1个2出现的机会更多。
$arrTurn = array(18,54,80,110,170,198,234,270,306,302);
$array = array();
foreach($arrTurn as $k=>$v){
switch($v){
case 18:
for($i=0;$i<80;$i++) $array[]=$v;
break;
case 302:
for($i=0;$i<5;$i++) $array[]=$v;
break;
default
$array[]=$v;
break;
}
}
//shuffle打乱数组函数
shuffle($array);
//输出第一个数组元素
echo reset($array);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式