`

PHP取权重

    博客分类:
  • PHP
 
阅读更多

在实际的开发过程中,经常会用到一些几率的时间,例如有这样一个奖励的数组:

ipad的几率是2%,金币的几率是80%,钻石币的几率是10%,经验值的几率是8%

要求写一个函数来计算你得到的是什么.

<?php
    
    $data = array(
        'iapd'  => 2,
        'coin'  => 80,
        'cash'  => 10,
        'xp'    => 8
    );

    $rs = get_weight_random($data);

    function get_weight_random($weight) {
        $point = 0;
        foreach ($weight as $value) {
            if ($value < 1) {
                $temp_value = explode('.', $value);
                $point = strlen(array_pop($temp_value));
            }
        }    
        $times = pow(10, $point);
        $weight_rand = mt_rand(1, array_sum($weight) * $times);
        asort($weight);
        $base = 0;
        foreach ($weight as $key => $value) {
            $min = $base * $times + 1;
            $max = ($base + $value) * $times;
            if ($weight_rand >= $min && $weight_rand <= $max) {
                break;
            } else {
                $base += $value;
            }
        }

        return $key;
    }
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics