有這樣的需求,在打開鏈接的時候,隨機(按照項目的某個屬性的比例隨機)跳轉到指定的幾個項目的某一個項目頁面
比如項目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),通過隨機數落在某個區間,來隨機對應的值,這樣就簡單的實現了按照權重隨機展示數據功能。