PHP根据权重重定向URL

时间:2011-02-08 00:43:57

标签: php algorithm redirect random

所以我有一个应用程序,允许我的客户输入不同的网址,只要权重总是100,就可以根据需要分配给特定的旋转器。

我们向客户提供了一个链接,当点击该链接时,应该触发一个脚本,该脚本会提取该特定旋转器的网址和权重,然后根据其具有的权重将最终用户重定向到其中一个网址。

我很挣扎,因为网址和权重是动态的,可以随时改变。我见过很多例子,但我仍然有问题。如果有人可以请求协助解决这个特殊的问题。

感谢。

1 个答案:

答案 0 :(得分:0)

这是我的快速实施:

<?php

$urls = array(
    array('url' => 'http://google.com', 'weight' => 50),
    array('url' => 'http://microsoft.com', 'weight' => 13),
    array('url' => 'http://apple.com', 'weight' => 42),
);

$total_weight = 0;
foreach ($urls as $url) {
    $total_weight += $url['weight'];
}

$rand = mt_rand(1, $total_weight);
var_dump($rand);

$selected_url = '';
foreach ($urls as $url) {
    $rand -= $url['weight'];

    if ($rand <= 0) {
        $selected_url = $url['url'];
        break;
    }
}

var_dump($selected_url);

另一个,更优雅一点:

<?php

$urls = array(
    array('url' => 'http://google.com', 'weight' => 50),
    array('url' => 'http://microsoft.com', 'weight' => 13),
    array('url' => 'http://apple.com', 'weight' => 42),
);

$probs = array();
foreach ($urls as $i => $url) {
    $probs = array_merge($probs, array_fill(1, $url['weight'], $i));
}

$rand = array_rand($probs);
var_dump($rand);
var_dump($urls[$probs[$rand]]['url']);