Случайная ссылка PHP - PullRequest
       43

Случайная ссылка PHP

1 голос
/ 14 марта 2011

EDITED

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

Пример:

Мне нужен код для случайного выбора и отображения ОДНОЙ из этих ссылок. Исключением является то, что если в данный момент просматривается article1.php, я хочу, чтобы его исключили из случайного выбора. Таким образом, только ссылки на ДРУГИЕ статьи видны в любой данной статье.

http://mysite.com/article1.php
http://mysite.com/article2.php
http://mysite.com/article3.php

Ответы [ 4 ]

1 голос
/ 14 марта 2011

Я бы использовал array_rand с чем-то вроде:

<?php
$links = array(array('url' => 'http://google.com', 'name'=>'google'),
               array('url' => 'http://hotmail.com', 'name' => 'hotmail'),
               array('url' => 'http://hawkee.com', 'name' => 'Hawkee'));
$num = array_rand($links);
$item = $links[$num];

printf('<a href="%s" title="%s">%s</a>', $item['url'], $item['name'], $item['name']);
?>

Где ссылки облегчают построение массива.Тем не менее, я думаю, что мы упускаем некоторые подробности о том, как вы захватываете свои ссылки.Что означает «текущая страница»?потому что самый простой способ сделать это - просто не добавлять страницу в массив.

А использование array_rand позволяет избежать путаницы с размером массива и т. д.

Редактировать: Я полагаю, вы используетебазы данных, поэтому у вас может быть запрос sql:

SELECT myfieldset FROM `articles` WHERE id = 'theid';

Итак, вы знаете идентификатор текущей статьи.Теперь вам просто нужно создать массив с некоторыми другими статьями с запросом, подобным следующему:

SELECT id FROM `articles` WHERE id NOT IN ('theid') ORDER BY RAND LIMIT 5

И построить массив-кандидат с этими результатами.

0 голосов
/ 14 марта 2011

попробуйте коды ниже:



$links = array(
            'http://mysite.com/article1.php',
            'http://mysite.com/article2.php',
            'http://mysite.com/article3.php',
            'http://mysite.com/article4.php',
            'http://mysite.com/article5.php'
       );

$currentPage = basename($_SERVER['SCRIPT_NAME']);

$count = 0;
$currentIndex = NULL;
foreach($links as $link) {
    if(strpos($link, "/".$currentPage)>-1)  $currentIndex = $count;
    $count++; 
}

if($currentIndex) {
    do{
        $random = mt_rand(0, sizeof($links) - 1);
    } while($random==$currentIndex);
} else {
    $random = mt_rand(0, sizeof($links) - 1);
}

$random_link = $links[$random];


0 голосов
/ 14 марта 2011
$lastUrl = trim(file_get_contents('last_url.txt'));
while($lastUrl == ($randUrl = $urls[rand(0, count($urls) - 1)])){}
file_put_contents('last_url.txt', $randUrl);

// ...

echo $randUrl;

Гарантирует, что при каждой загрузке страницы вы не получите предыдущий URL.Это, однако, только пример.Вы хотели бы включить блокировку файлов, обработку исключений (возможно) или совершенно другой носитель данных (БД и т.трюк:

// get current URL
$currentUrl = 'http://' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];

// randomize URLs until you get one that doesn't match the current
while($currentUrl == ($randUrl = $urls[rand(0, count($urls) - 1)])){ }

echo $randUrl;

Google "PHP получить текущий URL", и вы получите значительно более подробные способы захвата текущего URL.Например, условия того, используете ли вы HTTPS , чтобы добавить ' s ' к компоненту протокола.

0 голосов
/ 14 марта 2011

Каждый раз, когда вы случайным образом выбираете отображаемый URL-адрес, извлекайте его из массива и сохраняйте во временной переменной.Затем при следующем повороте сделайте свой выбор и ТОГДА перенесите ранее использованный URL обратно в массив.

...