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),通過隨機數落在某個區間,來隨機對應的值,這樣就簡單的實現了按照權重隨機展示數據功能。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM