2013-03-24 90 views
4

我有以下的數組:PHP陣列餾分

public $percentage = array(
    0 => 20.30, 
    1=> 19.96, 
    2=> 14.15, 
    3=> 45.59 
); 

//它總結在100%

我需要一個隨機函數由值的百分比,

返回鍵

例如:得到0的可能性是20.30%,並且得到2的可能性14.15%, 第一個用戶得到0,第二個有2

P租賃讓我知道你建議我使用的功能是什麼。

+1

函數究竟要做什麼?我無法想象 – 2013-03-24 10:09:25

+1

你想要一個有20.3%概率返回0的函數,14.15%返回2等嗎? – 2013-03-24 10:16:23

+0

你提供20.30%的概率爲零 – 2013-03-24 10:23:46

回答

7

將百分比轉換爲累計概率,然後將其與隨機數進行比較。

如果隨機數屬於一個類別,則輸出結果。如果沒有,轉到下一個,直到找到一個。這使您可以根據數組中陳述的概率百分比輸出一個數字。

$percentage = array(
    0 => 20.30, 
    1=> 19.96, 
    2=> 14.15, 
    3=> 45.59 
); 
$random = mt_rand(0,10000)/100; 
foreach ($percentage as $key => $value) { 
    $accumulate += $value; 
    if ($random <= $accumulate) { 
     echo $key; 
     break; 
    } 
} 
+0

謝謝,它完成了這項工作! – 2013-03-24 10:32:36

+0

真棒,幹得好! – saada 2013-03-24 11:21:35

2
$random_n = mt_rand(0,10000)/100; 
while(true){ 
    if($random_n <= $percentage[0]) 
    echo 0; break; 
    else if($random_n <= $percentage[1]) 
    echo 1; break; 
    else if($random_n <= $percentage[2]) 
    echo 2; break; 
    else if($random_n <= $percentage[3]) 
    echo 3; break; 
    else 
    $random_n = mt_rand(0,10000)/100; //generate a new random # 
} 
+0

你的解決方案只會給0,3或什麼都沒有:http://codepad.viper-7.com/IlNobo – Antony 2013-03-24 10:25:23

+0

嗯......那樣更好嗎? :) – saada 2013-03-24 10:29:25

+0

不會。問題是,您生成了一個隨機數,假設它是10,那麼根據該數組,結果爲0。如果隨機數是25,則結果爲3。如果隨機數是50,則不會顯示任何內容。 – Antony 2013-03-24 10:31:26

0

我會做這樣的事情:

  1. 以1和10000之間的隨機數(因爲你有四個顯著位)
  2. 如果數字是1年至2030年之間,然後它是一個零,如果是2031和(2031 + 1996)之間那麼它是一個1等
  3. ...
  4. 利潤
1
<?php 
$percentage = $tmp = array(
    0 => 20.30, 
    1=> 19.96, 
    2=> 14.15, 
    3=> 45.59 
); 

sort($tmp); 

$rand = mt_rand(0,100); 
foreach($tmp as $percent) { 
    if($percent >= $rand) { 
     echo array_search($percent,$percentage); 
     die(); 
    } 
} 

echo (count($percentage) - 1);