【问题标题】:PHP Redirect URL based on weight基于权重的 PHP 重定向 URL
【发布时间】:2011-06-23 03:23:51
【问题描述】:

所以我有一个应用程序,它允许我的客户输入不同的 url,只要权重总和为 100,就可以将他想要的任意数量分配给特定的旋转器。

我们向客户提供了一个链接,当点击该链接时,它会触发一个脚本,该脚本会提取该特定旋转器的 url 和权重,然后将最终用户重定向到根据权重分配的 URL 之一。

我正在苦苦挣扎,因为网址和权重是动态的,并且可以随时更改。我看过很多例子,但仍然有问题。如果有人可以帮助解决这个特定的问题,那就太好了。

谢谢。

【问题讨论】:

    标签: php algorithm redirect random


    【解决方案1】:

    这是我的快速实现:

    <?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']);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多