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