2014-05-23 1 views
1

J'utilise smarty v2.6 et je veux générer des nombres aléatoires distincts. Je cherche un moyen efficace et rapide de le faire en utilisant les fonctions Smarty déjà fournies. Ceci est mon code pour générer 5 nombres aléatoires (mais pas distincts):Générer des numéros aléatoires smarty distincts

{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} 

Répondre

1

si vous avez vraiment besoin de le faire dans les modèles Smarty

méthode 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 | 

Méthode 2

  • array_fill()
  • array_keys()
  • array_rand() + unset() à la place (lecture aléatoire)
+0

Un peu réponse tardive, mais merci! : p –

+0

Pourquoi n'utilisez-vous pas {math equation = 'rand (1,12)'}? –

1

Vous vous approchez le problème du point de vue erroné.

Smarty est utilisé pour afficher des données, avec un ensemble très limité d'instructions pour les manipuler. Puisque nous parlons ici de logique, vous devez générer vos nombres uniques aléatoires ailleurs et ensuite transmettre le résultat au moteur Smarty.

Par conséquent, en supposant que vous utilisez PHP, essayer quelque chose comme ceci:

$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); 

Et dans votre fichier modèle:

{foreach from=$random_numbers item=random} 
    {$random} 
{/foreach} 

Vous devez toujours essayer de séparer le contenu de la présentation. Smarty ne devrait pas se préoccuper des valeurs qui lui sont transmises. (Contrôles en dehors simples pour voir si vous devez afficher quelque chose ou non, à mon avis)