我有以下腳本:在陣列PHP隨機值ponderated
$domain = ['gmail.com', 'yahoo.com', 'hotmail.com'];
$domain = $domain[mt_rand(0, count($domain) - 1)];
,能夠設定對每個項目coresponding到被選擇的機會一個百分比值。例如,我想有75%的機會擁有$ domain ='gmail.com';.
我有以下腳本:在陣列PHP隨機值ponderated
$domain = ['gmail.com', 'yahoo.com', 'hotmail.com'];
$domain = $domain[mt_rand(0, count($domain) - 1)];
,能夠設定對每個項目coresponding到被選擇的機會一個百分比值。例如,我想有75%的機會擁有$ domain ='gmail.com';.
有很多方法可以達到預期的效果。
我的方法並不要求總「機會」是100;你可以自己決定最高鑰匙的價值。
我的方法的基礎是結果($domain
)將是最小的密鑰不大於隨機數($pick
)的數組值。
下面是一個給gmail 75%的機會,並給予其餘25%的機會的機會。
*請注意,mt_rand()
從1開始,而0在問題下評論。
$domain_perc=array(
750=>'gmail.com', // between 1 & 750 = 75% chance
875=>'yahoo.com', // between 751 & 875 = 12.5% chance
1000=>'hotmail.com' // between 876 & 1000 = 12.5% chance
);
$pick=mt_rand(1,max(array_keys($domain_perc)));
foreach($domain_perc as $p=>$v){
if($pick<=$p){
$domain=$v;
break;
}
}
或者也可以與此一襯墊更換foreach()
代碼塊:
$domain=current(array_filter($domain_perc,function($v,$k)use($pick){return $pick<=$k;},ARRAY_FILTER_USE_BOTH));
作爲用於定製輸入陣列,表達爲50%-25%-25%分割的一個簡單的方法將是:
$domain_perc=array(
2=>'gmail.com', // 1 and 2 of 4 = 50% chance
3=>'yahoo.com', // 3 of 4 = 25% chance
4=>'hotmail.com' // 4 of 4 = 25% chance
);
要設置一個兩值陣列與〜33%〜航班嗎66%分割:
$domain_perc=array(
1=>'gmail.com', // 1 of 3 = ~33% chance
3=>'yahoo.com' // 2 & 3 of 3 = ~66% chance
);
對不起,我遲到的迴應。感謝您的答覆! –
'$ i = mt_rand(0,100); if($ i <75)$ domain = $ domain [0];' – splash58
它使用Mersenne Twister算法。如果你需要定製一個,你爲什麼不創建一個? – Thamilan
$ domain = ['gmail.com','gmail.com','gmail.com','gmail.com','yahoo.com','hotmail.com']; 4:2現在有更多機會獲得gmail。只是一個棘手的不正確的方式。 –