Smarty несколько случайных чисел список - PullRequest
3 голосов
/ 07 апреля 2010

Есть ли какой-нибудь умный способ размещения случайных чисел (например, 1-4) в списке с помощью умного tpl-движка?

Стандартный список отсортирован 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>

Я действительно протестировал почти все, но мне нужно только умное и маленькое решение для этого: -)

С уважением, Heinrich

Ответы [ 3 ]

1 голос
/ 07 апреля 2010

Вы могли бы сделать что-то действительно грязное, как это:

<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>
1 голос
/ 07 апреля 2010

Вы можете использовать функцию rand () из php в smarty.Передайте параметр как количество раз, которое вы запустите цикл, и все должно быть сделано.

0 голосов
/ 08 апреля 2010

хорошо, похоже, проблема PHP. Начиная с последних версий PHP, array_rand больше не является случайным. Я пытался добавить что-то вроде этого

    |shuffle

or

    shuffle();

к умному коду Тома,

но безуспешно> _ <</p>

...

...