【问题标题】:Smarty multiple random numbers listSmarty 多个随机数列表
【发布时间】:2010-04-07 12:09:08
【问题描述】:

有没有使用 smarty tpl 引擎在列表中发布随机数(例如 1-4)的智能方法?

按 1-5 排序的标准列表:

<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
</ul>

这是我的解决方案(PHP):

<ul>
{foreach from=randomNumbers}
<li>{smarty.randomNumbers}</li>
{/foreach}
</ul>

修改后的列表按 1-5 排序(随机):

<ul>
  <li>3</li>
  <li>2</li>
  <li>5</li>
  <li>1</li>
  <li>4</li>
</ul>

我已经测试了几乎所有东西,但我只需要一个智能且小型的解决方案 :-)

亲切的问候, 海因里希

【问题讨论】:

    标签: php smarty random


    【解决方案1】:

    您可以在 smarty 中使用 php 中的 rand() 函数。传递参数作为你运行循环的次数,你应该完成了。

    【讨论】:

      【解决方案2】:

      你可以像这样做一些非常肮脏的事情:

      <ul>
        {foreach from=0|range:4|@array_rand:5 item=i}
          {assign var=i value=$i+1}
          <li>{$i}</li>
        {/foreach}
      </ul>
      

      编辑

      正如您所说,array_rand() 不再随机播放结果。您不能真正轻松地使用shuffle(),因为它不会返回经过洗牌的数组 - 不过您可以这样做:

      //somewhere in an included PHP file
      function shuffle_array($array){ 
         shuffle($array);
         return $array;   
      }
      
      {*template *}
      <ul>
        {foreach from=1|range:5|@shuffle_array item=i}
          <li>{$i}</li>
        {/foreach}
      </ul>
      

      【讨论】:

      • @Heinrich:你得到了什么输出?
      • 通过使用您的代码 sn-p,我得到一个干净的数字输出:1,2,3,4,5,而不是像 5,4,2,1,3 或 4 这样的随机数, 1,2,3,5 等:-/
      • @Heinrich:很奇怪。这个对我有用。我猜你已经尝试过清除 templates_c/ 之类的所有方法
      • 是的,但我仍然得到 1,2,3,4,5 :-(,我需要一个特定的 smarty.plugin 才能正确运行您的 code-sn-p 吗?
      【解决方案3】:

      好的,这似乎是一个 PHP 问题。自上一个 PHP 版本以来,array_rand 不再是随机的。我试图添加这样的东西

          |shuffle
      
      or
      
          shuffle();
      

      到汤姆的聪明代码,

      但没有成功>_

      ...

      【讨论】:

      • 不幸的是,这不起作用,因为 shuffle 修改了传递的数组并返回一个 bool
      猜你喜欢
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多