我正在使用 smarty v2.6,我想生成随机的不同数字。我正在寻找一种有效、快速的方法来使用已经提供的 Smarty 功能来完成此操作。这是我生成 5 个随机数(但不不同)的代码:
{assign var=min value=1}{assign var=max value =5}
{section name=val start=$min loop=$max+1}
{assign var=random value=1|mt_rand:15}
{$random}
{/section}
最佳答案
您从错误的角度处理问题。
Smarty 用于显示数据,只有一组非常有限的指令来操作它们。 由于我们在这里讨论逻辑,您应该在其他地方生成随机唯一数字,然后将结果传递给 Smarty 引擎。
因此,假设您使用 PHP,请尝试如下操作:
$min = 1;
$max = 100;
$items_to_pick = 5;
$values = array();
for($i=$min; $i<= $max; ++$i){
$values[] = $i;
}
shuffle($values) //see PHP doc http://www.php.net/manual/en/function.shuffle.php
$result = array_slice($values, 0, $items_to_pick);
$smarty->assign('random_numbers', $result);
在你的模板文件中:
{foreach from=$random_numbers item=random}
{$random}
{/foreach}
您应该始终尝试将内容与演示文稿分开。 Smarty 不应该关心它传递的值。 (在我看来,除了简单的检查是否应该显示某些内容之外)
关于loops - 生成不同的 smarty 随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23830240/