Eleven enjoy the world ~

抽奖算法

算法如下

//奖品 id => 概率%
$award = [
    '1' => '10',
    '2' => '20',
    '3' => '50',
    '4' => '20'
];

function draw($proArr)
{
  $result = '';
  //概率数组的总概率精度
  $proSum = array_sum($proArr);
  //概率数组循环
  foreach ($proArr as $key => $proCur) {
    $randNum = mt_rand(1, $proSum);
    if ($randNum <= $proCur) {
      $result = $key;
      break;
    } else {
      $proSum -= $proCur;
    }    
  }
  unset ($proArr);
  return $result;
}

echo draw($award);