产生不同的Smarty的随机数(Generate distinct smarty random nu

2019-10-20 04:31发布

我使用的是智者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}

Answer 1:

如果你真的需要做的是在Smarty模板

方法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()+未设置(),而不是随机()


Answer 2:

你从错误的观点接近的问题。

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的不应该关心它传递的值。 (外面简单的检查,看看是否应该显示什么或没有,在我看来)



文章来源: Generate distinct smarty random numbers