Алгоритм выбора 1 из 2 пунктов на основе вероятности - PullRequest
2 голосов
/ 21 октября 2010

Я кодирую проект, который генерирует два массива, содержащих данные. Один массив содержит данные для конкретной страны, а другой - данные для всех стран.

Например, если пользователь из США делает запрос, мы сгенерируем два массива с данными. Один с данными только для США, а другой с данными для всего мира, включая США. Я хочу дать американскому массиву 60% шанс быть выбранным, если посетитель из США. Это означает, что другой массив будет иметь 40% шанс быть выбранным.

Как один код это ??

Ответы [ 2 ]

7 голосов
/ 21 октября 2010
if(rand(1, 100) <= $probability_for_first_array)
{
    use_the($first_array);
}
else
{
    use_the($second_array);
}

Я считаю это простым, легко читаемым решением

3 голосов
/ 21 октября 2010
<?php

$us_data = "us";
$worldwide_data = "worldwide";

$probabilities = array($us_data => 0.60, $worldwide_data => 0.40);

/* Code courtesy of Jesse Farmer
 * For more details see http://goo.gl/fzq5
 */
function get_data($prob)
{
 $random = mt_rand(0, 1000);
 $offset = 0;
 foreach ($prob as $key => $probability)
 {
  $offset += $probability * 1000;
  if ($random <= $offset)
  {
   return $key;
  }
 }
}

?>

Пример Габи подходит для двух наборов, но если у вас есть больше наборов данных для выбора, структура if-else не подходит.

...