2011-02-08 122 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']);