Выбор с вероятностью, проверка значений

Пожалуйста, извините за мой язык.

Я выбираю с вероятностью. Сумма вероятностей равна 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 Выражение вручную.
Как проверить, между какими случайными элементами массива рисуется значение и отображать ее имя?

0

Решение

С макушки моей головы:

$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);

Идея состоит в том, чтобы перебрать все строки таблицы, используя один if для каждого фрукта.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]