2011-02-08 6 views
0

Поэтому у меня есть приложение, которое позволяет моему клиенту войти в различной URL, и назначить столько, сколько он хочет, чтобы к определенному ротатору, пока вес всегда составляет 100.PHP Перенаправление URL на основе веса

Существует мы выдаем клиентам, что при нажатии на них следует запустить сценарий, который вытаскивает 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']);