2011-01-09 147 views
0

我试图设置此代码加载的随机链接,但我有一个问题:随机链接PHP

$links = file('myfile.txt'); 
$rand_link = $links[ mt_rand(0, count($links) - 1) ]; 
echo '<div class="link"><a href="' . $rand_link . '"><img src="button.png" border="0"></a></div>'; 

它有时会显示它前面显示的页面。我希望它记住它显示的网站,并且不要再显示它,直到用户从头开始。非常感谢您的帮助。

+0

你忘了显示的代码。 – 2011-01-09 08:40:52

+0

我无法在其中嵌入代码,但它看起来像这样。 $ links = file('myfile.txt'); $ rand_link = $ links [mt_rand(0,count($ links) - 1)]; echo'

'; – Truthworthy 2011-01-09 08:41:39

回答

2

终于拥有多个站点的增强版本历史

// Predefinitions 
$links = file('myfile.txt'); 
$currentPage = $_SERVER['PHP_SELF']; 

// make sure links are pure and no whitespaces are left 
foreach ($links as &$link) 
{ 
    $link = trim($link); 
} 

// prepare for history 
if (! array_key_exists('visited_links', $_SESSION)) 
{ 
    $_SESSION['visited_links'] = array(); 
} 
// add current site to visited links if it wasnt visited earlier 
if (! in_array($currentPage, $_SESSION['visited_links'])) 
{ 
    $_SESSION['visited_links'][] = $currentPage; 
} 

// get all those links which weren't visited yet kinda $links = $allLinks - $visitedLinks 
$potentialLinks = array_diff($links, $_SESSION['visited_links']); 

$randomLinkId = mt_rand(0, count($potentialLinks)-1); 
$randomLinkIds = array_keys($potentialLinks); 
$randomLink = $potentialLinks[$randomLinkIds[$randomLinkId]]; 


echo '<div class="link"><a href="'.$randomLink.'"><img src="button.png" border="0"></a></div>'; 

可能有潜在的错误如果您$_SERVER['PHP_SELF']链表的格式,这不同,你可以用一些快速var_dumps评估此。 据我所知WordPress的自动启动会话,这应该解释你的错误消息。该脚本假定会话已经启动。

+0

不幸的是我很初学。你能帮助实施吗? – Truthworthy 2011-01-09 10:58:30

0

试试这个代码。可能是错误,我没有在服务器上测试过。我使用会话来保存已查看的页面。

$links = file('myfile.txt'); 
$show_links = array(); 

session_start(); 

if($_SESSION['show_links']) 
foreach($_SESSION['show_links'] as $key=>$value){ 
    $show_links[$key] = $value; 
} 

$random_link_number = mt_rand(0, count($links) - 1); 

if(count($show_links) != count($links)){ 
while( !in_array($random_link_number, $show_links) ){ 
    $random_link_number = mt_rand(0, count($links) - 1); 
} 
} 
else{ 
    unset($show_links); 
} 

$show_links[] = $random_link_number; 
$_SESSION['show_links'] = $show_links; 

$rand_link = $links[ $random_link_number ];