2010-04-07 6 views
3

Y a-t-il une manière intelligente de publier des nombres aléatoires (par exemple 1-4) dans une liste en utilisant le moteur tpl de smarty?Liste de nombres aléatoires multiples Smarty

liste standart triée 1-5:

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

Voici ma solution (PHP):

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

liste modifiée triée 1-5 (aléatoire):

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

I J'ai vraiment testé presque tout, mais j'ai seulement besoin d'une petite solution intelligente & pour cela :-)

Cordialement, Heinrich

Répondre

1

Vous pouvez utiliser la fonction rand() de PHP Smarty. Passez le paramètre comme le nombre de fois que vous exécutez la boucle et vous devriez avoir terminé.

1

Vous pourriez faire quelque chose de vraiment sale comme ceci:

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

Modifier

Comme vous avez dit array_rand() plus SHUFFLES résultats. Vous ne pouvez pas vraiment utiliser shuffle() facilement car il ne retourne pas le tableau brassé - vous pourriez faire quelque chose comme ça si:

//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> 
+0

fonctionne bien, mais ma sortie est toujours numérique et non aléatoire – Heinrich

+0

@Heinrich: quel résultat obtenez-vous? –

+0

en utilisant votre extrait de code, j'obtiens une sortie numérique propre: 1,2,3,4,5, pas un randome comme 5,4,2,1,3 ou 4,1,2,3,5 etc. : -/ – Heinrich

0

ok, il semble être un problème PHP. Depuis les dernières versions de PHP, array_rand n'est plus aléatoire. J'ai essayé d'ajouter quelque chose comme ça

|shuffle 

or 

    shuffle(); 

à Smarty code de tom,

mais sans succès> _ <

...

+0

malheureusement que ne fonctionnera pas car shuffle modifie le tableau transmis et renvoie un booléen –

Questions connexes