每周洗牌阵

时间:2011-09-19 08:55:35

标签: php arrays shuffle timed

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

1 个答案:

答案 0 :(得分:2)

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

让我们假装你在$array

中有列表元素
srand(date('W'));
shuffle($array);
srand();

现在你的阵列被洗牌,并且将以同样的方式洗牌,直到下周一。

这有一个问题:它不适用于Suhosin补丁(默认安装在Debian中)。尽管如此,既然您已了解date('W'),那么您自己就可以轻松找到替代解决方案。

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

php_value suhosin.srand.ignore 0