【发布时间】:2011-09-19 08:55:34
【问题描述】:
我有一组 4 个 HTML 列表项,我想改变它们每周出现一次的顺序。我想知道那里是否有人对此有一个很好、优雅的解决方案?
与往常一样,我非常感谢您提供的任何意见!
更新:
不幸的是,即使有必要的 .htaccess 覆盖,我也无法让任何基于 srand() 的解决方案在这个特定的服务器上工作,但可以使用以下解决方案 - 目前,它只返回一个列表项 - 我如何修改它以显示所需的四个?再一次,任何想法都将不胜感激:)
function RandomList($TimeBase, $QuotesArray){
$TimeBase = intval($TimeBase);
$ItemCount = count($QuotesArray);
$RandomIndexPos = ($TimeBase % $ItemCount);
return $QuotesArray[$RandomIndexPos];
}
$WeekOfTheYear = date('W');
$RandomItems = array(
"<li><a href=\"#northern-germany\" title=\"Northern Germany\">North</a></li>","<li><a href=\"#southern-germany\" title=\"Southern Germany\">South</a></li>","<li><a href=\"#western-germany\" title=\"Western Germany\">West</a></li>","<li><a href=\"#eastern-germany\" title=\"Eastern Germany\">East</a></li>");
print RandomList($WeekOfTheYear, $RandomItems);
【问题讨论】:
-
我将发布一个答案,您应该在调用
shuffle_array()之前将周数用作srand()的种子值。这将每周产生相同的排序顺序。不幸的是,这似乎不再可能了,因为播种是从 PHP 4.2.0 开始自动执行的 :( -
@jensgram:这只是意味着它不再是必要,而不是不可能。 IE。您的解决方案将起作用。将其添加为答案。
-
@nikc 哦,好点。我只是假设种子总是被调用,但从未花时间验证。该实现已发布在另一个答案中,所以我不会费心写同样的内容:)(顺便说一句:我谈到了不存在的
shuffle_array()函数。显然,我的意思是shuffle(),cf cbrandolino 的答案。) -
@nikc,实际上它很可能无法工作,因为 suhosin 补丁。详情见答案。
-
@cbrandolino:OP 从未提及 Suhosin 补丁。我在没有它的情况下对它进行了分期付款测试,效果很好。