php – Algorithm to select 1 of 2 Items Based on Probability – Education Career Blog

I’m coding a project that generates two arrays containing data. One array contains data for a specific country and the other contains data for all countries.

For example, if a user from the US makes a request, we will generate two arrays with data. One with data only for the US and the other with data for worldwide, including the US. I want to give the US array a 60% chance of being selected if the visitor is from the US. That means the other array will have a 40% chance of being selected.

How does one code this??

,

if(rand(1, 100) <= $probability_for_first_array)
{
    use_the($first_array);
}
else
{
    use_the($second_array);
}

I find this a straightforward, easy to read solution

,

<?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;
  }
 }
}

?>

Gabi’s example is fine for two sets, but if you have more data sets to pick from, the if-else structure is not appropriate.

Leave a Comment