4

我有一组 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);
4

1 回答 1

2

这是一个简单且 - 我猜 - 非常优雅的解决方案,它不涉及将值存储在数据库中,设置 cronjobs 和其他类似的无聊东西。

假设您的列表元素位于$array

srand(date('W'));
shuffle($array);
srand();

现在你的数组被打乱了,并且会以同样的方式被打乱,直到下周一。

但是,这有一个问题:它不适用于 Suhosin 补丁(默认安装在 Debian 中)。不过,既然您知道了date('W'),自己想出一个替代解决方案就很容易了。

编辑:如果您不想实现自己的伪随机数生成器,但安装了 Suhosin,则可以将以下行放入您的.htaccess

php_value suhosin.srand.ignore 0

于 2011-09-19T09:48:25.817 回答