<?php
$arr = [ 0 => ['name' => '苹果电脑' ,'v' => '2'],//v为中奖概率 1 => ['name' => '苹果手表' ,'v' => '3'], 2 => ['name' => '小米手环' ,'v' => '5'], 3 => ['name' => '谢谢参与' ,'v' => '90'], ]; $count = '100'; //抽奖概率的总精度
function get_rand($arr, $count){ $result = '----'; foreach ($arr as $k => $v) { $sum = mt_rand(1, $count); // //echo ' --- sum = '.$sum; if ($sum <= $v['v']) { // $result = $k; break; } else{ $count -= $v['v']; // echo ' count = '.$count; } } return $result; } $k = get_rand($arr, $count);var_dump($arr[$k]);
开始是从1,100这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将概率空间,
也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去2,也就是说第二个数是在1,98这个范围内筛选的。
这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后
一个一定是。