• PHP按照比例随机


    有这样的需求,在打开链接的时候,随机(按照项目的某个属性的比例随机)跳转到指定的几个项目的某一个项目页面

    比如项目A:80  项目B:20

    那么跳转到项目A 的比例为80%,项目B的比例为20%

    那么用php代码可以这样写:

    $rand_num = rand(0,9);
    if(($rand_num >= 0) && ($rand <= 7)){  //80%
    
         //跳转到项目A   
    }else if(($rand_num >= 8) && ($rand <= 9)) { //20%
    
         //跳转到项目B
    }

    此逻辑不适合有多个一样权重的方式。

    优化后的方式如下:

    /**  
     * @param array $weight 权重 例如array('a'=>200,'b'=>300,'c'=>500)  
     * @return string key 键名   
     */  
    function roll($weight = array()) {   
        $roll = rand ( 1, array_sum ( $weight ) );   
        // echo $roll."<br>";
        $_tmpW = 0;   
        $rollnum = 0;   
        foreach ( $weight as $k => $v ) {   
            $min     = $_tmpW;   
            $_tmpW += $v;   
            $max     = $_tmpW;   
            if ($roll > $min && $roll <= $max) {   
                $rollnum = $k;   
                break;   
            }   
        }   
        return $rollnum;   
    }   
      
    $result = array();
    for($i=0; $i<100; $i++){
        $row = roll(array('b'=>300,'c'=>500,'a'=>200, 'd'=>200)); 
        @$result[$row]++;
    }
    
    echo "<pre>";
    print_r($result);

    将所有数据的权重合成多个区间(1-300,301-800, 801-1000, 1001-1200),通过随机数落在某个区间,来随机对应的值,这样就简单的实现了按照权重随机展示数据功能。

  • 相关阅读:
    HDU 4267 A Simple Problem with Integers
    java实现滑动解锁
    java实现滑动解锁
    java实现滑动解锁
    java实现滑动解锁
    java实现排列序数
    Delphi中文件流的使用方法
    基于Delphi7 WebService 在Apache发布及Apache使用说明
    资源文件的编译
    Delphi下IOC 模式的实现(反转模式,即Callback模式)
  • 原文地址:https://www.cnblogs.com/whoamme/p/3816459.html
Copyright © 2020-2023  润新知