随机链接PHP

时间:2011-03-13 22:50:00

标签: php random hyperlink

EDITED

我正在尝试在所有网页的底部设置随机链接。我正在使用下面的代码,但想要这样做,以便当前页面不包含在链接的随机轮换中。

示例:

我需要代码随机选择并显示其中一个链接。例外情况是,如果正在查看IF article1.php,我希望将其从随机选择中排除。这样,任何特定文章都只能看到其他文章的链接。

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

4 个答案:

答案 0 :(得分:1)

我会使用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';

所以你知道当前文章的ID。现在,您只需构建一个包含其他一些文章的数组,其中包含以下查询:

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

用这些结果构建候选数组。

答案 1 :(得分:0)

每次随机选择要显示的URL时,将其弹出数组并将其存储在临时变量中。然后,在下一次旋转时进行选择,然后将之前使用的URL推回到数组中。

答案 2 :(得分:0)

$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;

确保在每次加载页面时,您不会收到以前的网址。然而,这只是一个例子。您可能希望合并文件锁定,异常处理(可能)或完全不同的存储介质(DB等)


为了确保URL与当前的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获取当前网址”,您将获得更详细的方法来捕获当前网址。例如,关于您是否使用 HTTPS 的条件,将“ s ”附加到协议组件。

答案 3 :(得分:0)

尝试以下代码:



$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];