Heim  >  Artikel  >  Backend-Entwicklung  >  php抽奖程序与随机广告实现算法

php抽奖程序与随机广告实现算法

WBOY
WBOYOriginal
2016-07-25 08:53:341390Durchsuche
  1. /**
  2. * 全概率计算
  3. *
  4. * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4)
  5. * @return string 返回上面数组的key
  6. */
  7. function random($ps){
  8. static $arr = array();
  9. $key = md5(serialize($ps));
  10. if (!isset($arr[$key])) {
  11. $max = array_sum($ps);
  12. foreach ($ps as $k=>$v) {
  13. $v = $v / $max * 10000;
  14. for ($i=0; $i }
  15. }
  16. return $arr[$key][mt_rand(0,count($arr[$key])-1)];
  17. }
复制代码

例2,php抽奖程序 算法二

  1. function get_rand($proArr) {
  2. $result = '';
  3. //概率数组的总概率精度
  4. $proSum = array_sum($proArr);
  5. //概率数组循环
  6. foreach ($proArr as $key => $proCur) {
  7. $randNum = mt_rand(1, $proSum);
  8. if ($randNum $result = $key;
  9. break;
  10. } else {
  11. $proSum -= $proCur;
  12. }
  13. }
  14. unset ($proArr);
  15. return $result;
  16. }
复制代码

上述代码是一段经典的概率算法,$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将概率空减,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。

这个算法简单,而且效率非常高,关键是这个算法已在以前的项目中有应用,尤其是大数据量的项目中效率非常棒。



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn