URL перенаправления PHP в зависимости от веса - PullRequest
0 голосов
/ 08 февраля 2011

Итак, у меня есть приложение, которое позволяет моему клиенту вводить разные URL-адреса и назначать столько, сколько он хочет, определенному ротатору, пока вес всегда составляет 100.

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

Я изо всех сил, потому что URL-адреса и веса являются динамическими и могут измениться в любое время.Я видел много примеров, но все еще имею проблему.Если кто-то может помочь с этим конкретным вопросом, это было бы здорово.

Спасибо.

1 Ответ

0 голосов
/ 08 февраля 2011

Вот моя быстрая реализация:

<?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']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...