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),通过随机数落在某个区间,来随机对应的值,这样就简单的实现了按照权重随机展示数据功能。

原文地址:https://www.cnblogs.com/whoamme/p/3816459.html