1

私は 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}
4

2 に答える 2

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()
于 2014-12-18T19:53:15.287 に答える
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 は、渡された値を気にするべきではありません。(私の意見では、何かを表示する必要があるかどうかを確認するための簡単なチェック以外)

于 2014-05-23T13:29:36.507 に答える