2011-02-08 206 views
0

所以我有一个应用程序,可以让我的客户在不同的网址进入,当他想要到一个特定的转子,只要体重始终总计100PHP重定向URL

有一个分配尽可能多的我们给客户的链接是,当点击时应该激发一个脚本,该脚本可以提取该特定的旋转器的url和重量,然后将最终用户重定向到根据其重量分配的url之一。

我很努力,因为网址和权重是动态的,并且可以随时更改。我见过很多例子,但仍然有问题。如果有人能够协助解决这个特别的问题,那就太棒了。

谢谢。

回答

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); 

另外一个,多了几分ellegant:

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