一個權重比例隨機方法

應用場景:抽獎,服務器分配等

	/**
	 * @param array $weight 權重 例如array('a'=>10.5,'b'=>9.5,'c'=>80)
	 * @return string key 鍵名
	 */
	function arandom($weight = array()) {
	    //生成隨機數
	    $roll = rand (1, array_sum($weight));
	    $_tmpW = 0;
	    $column = '';
	    //判斷隨機數所在區間
	    foreach ( $weight as $k => $v ) {
	        $min = $_tmpW;
	        $_tmpW += $v;
	        $max = $_tmpW;
	        if ($roll > $min && $roll <= $max) {
	            $column = $k;
	            break;
	        }
	    }
	    return $column;
	}

	//執行一萬遍
	$result = array();
	for($i=0; $i<10000; $i++){
	    $row = arandom(array('a'=>10.5,'b'=>9.5,'c'=>80));
	    @$result[$row]++;
	}

	print_r($result);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章