• PHP按权重随机


    之前业务部门提了一个需求,要求将广告按照ecpm高低进行随机。(即:ecpm高的获取流量的几率大)

         如下数组:

     

      //要求AD1的概率要求为50%,AD2概率为25% ,AD3的概率为15%,AD4的概率为10%
      $ecpm  =  array(100,50,30,20);
      $ads  =  array("AD1",'AD2','AD3','AD4');

    我们知道,php有自带的生成随机数的函数  mt_rand(min,max)

    但是如果只用这个函数,4个选项的概率将是一模一样,那应该怎么办呢?

    我们可以将权重值相加 得出$sum,每个权重在0-$sum 中的都有自己的区间,随机  0-$sum,若随机数在权重区间内则判定随机的就是它。

    <?php
        $max    =    max($ecpm);
        $rand    =    mt_rand(0,$max);
        $step=0;  
        foreach($ecpm as $k=>$v){
        $step+=$v; 
        if($rand<=$step){
          break;//当前项即使随机值        
        }
      } 
    //  $k 即为最终随机产生的值
    欢迎各位指点!
  • 相关阅读:
    极验验证(滑动验证)的使用
    from close /destory
    tmeminifile and tinifile
    Delphi的OverRide、OverLoad和Virtual方法
    XE6 FMX之控件绘制与显示
    Delphi Android程序启动过程
    Delphi中的容器类
    接口
    集合
    class methed
  • 原文地址:https://www.cnblogs.com/thors/p/9494671.html
Copyright © 2020-2023  润新知