最近、プロジェクトの要件により、ユーザーが宝くじをクリックすると、3 つの異なる結果が返される (つまり、賞: 1 等、2 等、3 等、宝くじありがとう) を構築する必要があります。 ) 当然、賞品の出現確率は徐々に低下します。これには、重み計算と同様のアルゴリズムが必要です。ニーズに基づいて長い間考えた結果、最終的には単純な重み計算方法で問題を解決しました。確率はまだ予想の範囲内です。
この重み計算方法の概要は以下の通りです。
まず、この例は 1 次元が数値インデックスである 2 次元配列にのみ適しています。データ配列の構造は次のとおりです。
$data=array( 0=>array('id'=>1,'name'=>'一等奖','weight'=>'5'), 1=>array('id'=>2,'name'=>'二等奖','weight'=>'10'), 2=>array('id'=>3,'name'=>'三等奖','weight'=>'25'), 3=>array('id'=>4,'name'=>'谢谢抽奖','weight'=>'60') );
以下は重みを計算するための簡単なアルゴリズムです
// 权重数值越高,被返回的概率越大 // author www.Alixixi.com function countWeight($data){ $weight=0; $temp=array(); foreach($data as $v){ $weight+=$v['weight']; for($i=0;$i<$v['weight'];$i++){ $temp[]=$v;//放大数组 } } $int=mt_rand(0,$weight-1);//获取一个随机数 $result=$temp[$int]; return $result; }
計算結果は次のように返されます:
配列
(
[id] => 4
[名前] => 抽選ありがとうございます
[体重] => 60
)