2016-01-02 132 views
0

請原諒我的語言。選擇概率,檢查值

我選擇的概率。概率之和等於1. 例如:如果我繪製了數字0-0,6,則其概率值爲0,6。

我的實際代碼:

<!doctype html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Probability</title> 
</head> 
<body> 

<?php 
$fruits = array(); 
$table = array(array('fruit'=>'orange', 'probability'=>0.6), array('fruit'=>'strawberry', 'probability'=>0.3),array('fruit'=>'raspberry', 'probability'=>0.1)); 

echo '<pre>'; 
echo print_r($table); 
echo '</pre>'; 

for($i=0; $i<10; $i++){ 
    $temp = rand(0,10)/10; 
    if($temp<=0.6) { 
     $fruits[$i]=$table[0]['fruit']; 
    } 
    else if($temp>0.6 && $temp<=0.9) { 
     $fruits[$i]=$table[1]['fruit']; 
    } 
    else { 
     $fruits[$i]=$table[2]['fruit']; 
    } 
} 

echo '<p>Table</p>'; 
echo '<pre>'; 
echo print_r($fruits); 
echo '</pre>'; 
?> 
</body> 
</html> 

現在我用if,但我不知道如何來自動執行它,因爲最終會有更多的水果。概率值會經常變化,但現在我必須手動更改if表達式。 你如何檢查數組中隨機元素之間的繪製值並顯示她的名字?

回答

1

從我的頭頂:

$fruits = array(); 
$table = array(
    array('fruit' => 'orange', 'probability' => 60 /* percent */), 
    array('fruit' => 'strawberry', 'probability' => 30), 
    array('fruit' => 'raspberry', 'probability' => 10) 
); 

// append rand_min & rand_max values to table rows 
for($i = 0; $i < count($table); $i++) 
{ 
    $row = &$table[$i]; 

    if ($i > 0) 
    { 
    $previous_row = $table[$i - 1]; 

    $row["rand_min"] = $previous_row["rand_max"]; 
    $row["rand_max"] = $row["rand_min"] + $row["probability"]; 
    } 
    else 
    { 
    $row["rand_min"] = 0; 
    $row["rand_max"] = $row["probability"]; 
    } 

    unset($row); // to avoid side effects when $row is used later 
} 

// calculate fruits 
for($i = 0; $i < 10; $i++) 
{ 
    $rand = rand(0, 100); 

    foreach ($table as $row) 
    { 
    if ($row["rand_min"] <= $rand && $rand <= $row["rand_max"]) 
    { 
     $fruits[$i] = $row["fruit"]; 

     break; 
    } 
    } 
} 

print_r($fruits); 

的想法是遍歷所有錶行,而不是使用一個單一的,如果每個水果。

+0

謝謝回答。 我想這樣的事情: 0-0,6 - >橙色 0,6-0,9 - >草莓 0,9-1,0 - >樹莓 例如,現在如果概率= 0.7 - >橙色 我想要草莓。 – vjdj

+0

@vjdj是否允許修改表結構? – ViRuSTriNiTy

+0

你覺得這個怎麼樣修改:如果($行[ 「概率」<= 1- $概率) – vjdj