【问题标题】:Generate distinct smarty random numbers生成不同的 smarty 随机数
【发布时间】:2014-05-23 13:14:25
【问题描述】:

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

【问题讨论】:

    标签: loops random smarty smarty2


    【解决方案1】:

    如果你真的需要在 smarty 模板中这样做

    方法一

    {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()

    【讨论】:

    • 为什么不使用 {math equation='rand(1,12)'} ?
    【解决方案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 不应该关心它传递的值。 (在我看来,除了简单的检查,看看你是否应该显示一些东西)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多