因此,我有一个应用程序,它允许我的客户输入不同的url,并将他想要的任意数量分配给特定的旋转者,只要权重总和为100。
有一个我们提供给客户的链接,当点击这个链接时,应该会触发一个脚本,该脚本会拉取特定旋转器的url和权重,然后根据其权重将最终用户重定向到其中一个分配的url。
我在苦苦挣扎,因为url和权重是动态的,随时都可以改变。我看过很多例子,但仍然有一个问题。如果有人能在这个特定的问题上提供帮助,那就太好了。
谢谢。
发布于 2011-02-08 09:04:02
下面是我的快速实现:
<?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']);https://stackoverflow.com/questions/4928436
复制相似问题