的 EDITED 的
我正在尝试在所有网页的底部设置随机链接。我正在使用下面的代码,但想要这样做,以便当前页面不包含在链接的随机轮换中。
示例:
我需要代码随机选择并显示其中一个链接。例外情况是,如果正在查看IF article1.php,我希望将其从随机选择中排除。这样,任何特定文章都只能看到其他文章的链接。
http://mysite.com/article1.php
http://mysite.com/article2.php
http://mysite.com/article3.php
答案 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];