生成明显的智能随机数

时间:2014-05-23 13:14:26

标签: loops random smarty smarty2

我使用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}

2 个答案:

答案 0 :(得分:1)

您从错误的角度来看待问题。

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不应该关心它所通过的价值观。 (在我看来,在外面进行简单的检查,看你是否应该展示一些东西)

答案 1 :(得分:1)

如果你真的需要在聪明的模板中做到这一点

方法1

{assign var="distinct_numbers" value=array_fill(1,15,'x')}
{assign var="distinct_numbers" value=array_keys($distinct_numbers)}
{assign var="x" value=shuffle($distinct_numbers)}

{* result *}

{foreach from=$distinct_numbers item="value"}
    {$value} |
{/foreach}


1 | 7 | 3 | 10 | 4 | 8 | 6 | 14 | 13 | 12 | 2 | 5 | 11 | 9 | 15 | 

方法2

  • array_fill()
  • array_keys()
  • array_rand()+ unset()而不是shuffle()