Maison  >  Article  >  développement back-end  >  Exemple de php implémentant un algorithme de probabilité de gain pour un programme de loterie

Exemple de php implémentant un algorithme de probabilité de gain pour un programme de loterie

黄舟
黄舟original
2017-11-15 11:16:384156parcourir

Dans notre travail quotidien, nous participons souvent à certaines activités de loterie, nous allons donc partager aujourd'hui avec vous l'algorithme de probabilité de gain PHP, qui peut être utilisé pour les cartes à gratter, la grande roue et d'autres algorithmes de loterie. L'utilisation est très simple. Il y a des commentaires instructions détaillées dans le code, qui peuvent être comprises en un coup d'œil. Les amis qui en ont besoin peuvent s'y référer.

Terminons d'abord le processus PHP backend. Le travail principal de PHP est de configurer les récompenses et la probabilité de gain correspondante. Lorsque la page frontale clique pour retourner une certaine case, elle envoie une requête ajax à. le backend PHP. Ensuite, le backend PHP le configurera en fonction de la configuration, le résultat gagnant est donné via l'algorithme de probabilité et les informations sur le prix non gagné sont également envoyées à la page front-end au format de données JSON.

Regardons d'abord la fonction de calcul de probabilité

function get_rand($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; 
}

Le code ci-dessus est un algorithme de probabilité classique. $proArr est un tableau prédéfini. Supposons que le tableau soit : array(100,200,300,400), La première étape consiste à vérifier si le premier nombre se situe dans la plage de probabilité de 1 1000. Si ce n’est pas le cas, l’espace de probabilité, c’est-à-dire l’espace de probabilité du nombre moins la valeur de k, est utilisé. dans l'exemple, 100 est soustrait, ce qui signifie que le deuxième nombre est filtré dans la plage de 1 900. De cette façon, jusqu’à la fin, il y aura toujours un numéro qui répondra aux exigences. C'est comme toucher quelque chose dans une boîte. Si le premier n'est pas là, le deuxième n'est pas là et le troisième n'est pas là, alors le dernier doit l'être. Cet algorithme est simple et très efficace. La clé est que cet algorithme a été appliqué dans nos projets précédents, en particulier dans des projets avec de grandes quantités de données. L'efficacité est très bonne.

Ensuite, nous configurons les récompenses via PHP.

$prize_arr = array( 
  &#39;0&#39; => array(&#39;id&#39;=>1,&#39;prize&#39;=>&#39;平板电脑&#39;,&#39;v&#39;=>1), 
  &#39;1&#39; => array(&#39;id&#39;=>2,&#39;prize&#39;=>&#39;数码相机&#39;,&#39;v&#39;=>5), 
  &#39;2&#39; => array(&#39;id&#39;=>3,&#39;prize&#39;=>&#39;音箱设备&#39;,&#39;v&#39;=>10), 
  &#39;3&#39; => array(&#39;id&#39;=>4,&#39;prize&#39;=>&#39;4G优盘&#39;,&#39;v&#39;=>12), 
  &#39;4&#39; => array(&#39;id&#39;=>5,&#39;prize&#39;=>&#39;10Q币&#39;,&#39;v&#39;=>22), 
  &#39;5&#39; => array(&#39;id&#39;=>6,&#39;prize&#39;=>&#39;下次没准就能中哦&#39;,&#39;v&#39;=>50), 
);

Le tableau bidimensionnel enregistre toutes les informations sur les prix de cette loterie, où id représente le niveau gagnant, le prix représente le prix et v représente la probabilité de gagner. Notez que v doit être un entier. Vous pouvez définir le v de la récompense correspondante sur 0, ce qui signifie que la probabilité de remporter la récompense est de 0. La somme de v dans le tableau (base) est grande. précis, la probabilité peut être reflétée. Dans cet exemple, la somme de v est de 100, alors la probabilité de gagner pour la tablette est de 1 %. Si la somme de v est de 10 000, la probabilité de gagner est de une sur dix mille.

Chaque fois que la page frontale est demandée, PHP parcourt le tableau de paramètres de récompense et obtient l'identifiant de récompense tiré via la fonction de calcul de probabilité get_rand. Enregistrez les prix gagnants dans le tableau $res['yes'], enregistrez les informations non gagnantes restantes dans $res['no'], et enfin affichez les données du numéro json sur la page frontale.

 foreach ($prize_arr as $key => $val) { 
   $arr[$val[&#39;id&#39;]] = $val[&#39;v&#39;]; 
 } 
 
 $rid = get_rand($arr); //根据概率获取奖项id 
 
 $res[&#39;yes&#39;] = $prize_arr[$rid-1][&#39;prize&#39;]; //中奖项 
 unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项 
 shuffle($prize_arr); //打乱数组顺序 
 for($i=0;$i<count($prize_arr);$i++){ 
   $pr[] = $prize_arr[$i][&#39;prize&#39;]; 
 } 
 $res[&#39;no&#39;] = $pr; 
 echo json_encode($res);

Vous trouverez ci-joint la méthode de mise en œuvre d'un internaute

/**
  * 抽奖
  * @param int $total
  */
  function getReward($total=1000)
  {
  $win1 = floor((0.12*$total)/100);
  $win2 = floor((3*$total)/100);
  $win3 = floor((12*$total)/100);
  $other = $total-$win1-$win2-$win3;
  $return = array();
  for ($i=0;$i<$win1;$i++)
  {
  $return[] = 1;
  }
  for ($j=0;$j<$win2;$j++)
  {
  $return[] = 2;
  }
  for ($m=0;$m<$win3;$m++)
  {
  $return[] = 3;
  }
  for ($n=0;$n<$other;$n++)
  {
  $return[] = &#39;谢谢惠顾&#39;;
  }
  shuffle($return);
  return $return[array_rand($return)];
  }
  $data = getReward();
  echo $data;
  ?>

Résumé :

Croyez-le jusqu'au bout Au cours du processus d'étude de cet article, tout le monde a une certaine compréhension de l'algorithme de probabilité de gain du programme de loterie en PHP. J'espère que cela vous sera utile dans votre travail !

Recommandations associées :

Programme de loterie PHP et algorithme de mise en œuvre de publicité aléatoire

Code de base du programme de loterie PHP (pour attirer trois téléspectateurs chanceux)

Algorithme de probabilité du programme de loterie PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn