2010-10-21 64 views
2

我正在編寫一個項目,該項目生成兩個包含數據的數組。一個數組包含特定國家的數據,另一個包含所有國家的數據。基於概率選擇2項中的1項的算法

例如,如果來自美國的用戶發出請求,我們將生成兩個包含數據的數組。一個數據僅用於美國,另一個數據用於全球範圍的數據,包括美國。如果訪問者來自美國,我想給美國陣列60%的機會被選中。這意味着其他陣列將有40%的機會被選中。

這是怎麼一個代碼?

回答

7
if(rand(1, 100) <= $probability_for_first_array) 
{ 
    use_the($first_array); 
} 
else 
{ 
    use_the($second_array); 
} 

我該找一個簡單,易於閱讀的解決方案

3
<?php 

$us_data = "us"; 
$worldwide_data = "worldwide"; 

$probabilities = array($us_data => 0.60, $worldwide_data => 0.40); 

/* Code courtesy of Jesse Farmer 
* For more details see http://goo.gl/fzq5 
*/ 
function get_data($prob) 
{ 
$random = mt_rand(0, 1000); 
$offset = 0; 
foreach ($prob as $key => $probability) 
{ 
    $offset += $probability * 1000; 
    if ($random <= $offset) 
    { 
    return $key; 
    } 
} 
} 

?> 

加比的例子是罰款兩集,但如果你有多個數據集挑選,如果 - else結構不適當。