PHP按照比例随机
有这样的需求,在打开链接的时候,随机(按照项目的某个属性的比例随机)跳转到指定的几个项目的某一个项目页面
比如项目A:80 项目B:20
那么跳转到项目A 的比例为80%,项目B的比例为20%
那么用php代码可以这样写:
$rand_num = rand(0,9); if(($rand_num >= 0) && ($rand <= 7)){ //80% //跳转到项目A }else if(($rand_num >= 8) && ($rand <= 9)) { //20% //跳转到项目B }
此逻辑不适合有多个一样权重的方式。
优化后的方式如下:
/** * @param array $weight 权重 例如array('a'=>200,'b'=>300,'c'=>500) * @return string key 键名 */ function roll($weight = array()) { $roll = rand ( 1, array_sum ( $weight ) ); // echo $roll."<br>"; $_tmpW = 0; $rollnum = 0; foreach ( $weight as $k => $v ) { $min = $_tmpW; $_tmpW += $v; $max = $_tmpW; if ($roll > $min && $roll <= $max) { $rollnum = $k; break; } } return $rollnum; } $result = array(); for($i=0; $i<100; $i++){ $row = roll(array('b'=>300,'c'=>500,'a'=>200, 'd'=>200)); @$result[$row]++; } echo "<pre>"; print_r($result);
将所有数据的权重合成多个区间(1-300,301-800, 801-1000, 1001-1200),通过随机数落在某个区间,来随机对应的值,这样就简单的实现了按照权重随机展示数据功能。