两个链接之间的加权百分比?

时间:2016-06-19 21:39:39

标签: php redirect random percentage

我正在使用php重定向器中的两个旋转链接,有没有办法按百分比对它们进行加权?

例如:第一个链接有70%的可能性或被重定向,第二个链接有30%。

代码:

    <?php
$k = $_GET['sub'];

$aff[] = 'http://google.com';
$aff[] = 'http://yahoo.com';

srand ((double) microtime() * 1000000);
$random_number = rand(0,count($aff)-1);

$lol = ($aff[$random_number]);
$lal = $lol.$k;

header("Location: $lal");
?>

有类似的问题,但涉及两个以上的变量。

2 个答案:

答案 0 :(得分:1)

这似乎有效。

$array = array(70 => "http://google.com",  
               30 => "http://yahoo.com");

$random_number = rand(0, 100);
$last_interval = 0;
$link = "";
foreach( $array as $key => $value ) {
    // in range?
    if($random_number > $last_interval && $random_number < $key + $last_interval) {
        $link = $value;
        break;
    }
    $last_interval = $key;
}

echo "You chose: " . $link;

概念取自https://softwareengineering.stackexchange.com/questions/150616/return-random-list-item-by-its-weight并略微适应,这是一个可行的概念。感谢@Benjamin Kloster撰写了原帖。

  1. 准备一个包含0到总和的间隔列表(在您的情况下为权重,30和70)。每个间隔代表一个链接,其长度是它的重量,因此对于您的示例:

    intervals = [70, 100]

    其中索引0-70表示链接#1,70-100表示​​链接#2。

  2. 生成范围内的随机数n 0到总和(权重)
  3. 找出n下降的时间间隔,并获得链接。

答案 1 :(得分:0)

也许你可以这样做:

$array = array(
     array( 30, 'http://google.de/' ),
     array( 70, 'http://google.com/' )
);



$number = rand( 1, array_sum( array_column( $array, 0 ) ) );
$lastsum = 0;
foreach( $array as $arr ){
    if( $number > $lastsum && $number <=  ( $lastsum + $arr[0] )  ){
        $url =  $arr[1];
        break;
    }
    $lastsum +=  $arr[0];
}