2016-07-13 19 views
2

Ich habe eine Liste von Elementen in Twig, die so aussieht.Erhalten Sie zwei zufällige Elemente aus einer Liste in Zweig

{% set listItems = [ 
    { "name":"Bob","title":"Director","text":"Bob like burgers." }, 
    { "name":"Sue","title":"Manager","text":"Sue loves cash registers." }, 
    { "name":"Tim","title":"Assistant","text":"Tim doesn't like anything." } 
] %} 

würde Ich mag zwei der drei zur Verfügung stehenden Menschen in Twig zufällig bekommen, so dass ich zwei Profile in einem Block von meiner Seite anzeigen kann. (Wie ein rotierendes Doppel-Feature!)

Ich kann keinen Weg finden, die Twig Docs zu verwenden, um dies zu tun, aber ich denke darüber falsch.

+2

Sie können installieren Sie die [array] (https://github.com/twigphp/Twig-extensions/blob/master/lib/Twig/Extensions/Extension/Array.php) Erweiterung und kombinieren Sie dann shuffle mit der Antwort von @ user1453870: '{% für Element in listItems | shuffle | slice (0,2)%}' – DarkBee

+0

Array-Erweiterung in offiziellen Dokumenten: http://twig.sensiolabs.org/doc/extensions/ array.html –

+0

Das ist die richtige Antwort und es hat geklappt! Wie kann man das am besten als Antwort markieren, @DarkBee? – fiddlestacks

Antwort

1

Sie die array extension installieren und dann kombinieren shuffle mit @ user1453870 Antwort:

{% for item in listItems|shuffle|slice(0,2) %} 
0
{% set listItems = [] %} 
{% set people = [{"name":"Bob"},{"name":"Sue"},{"name":"Tim"}] %} 

{% for n in [0,9] %} 
    {% for obj in random(people) %} 
     {% if obj not in listItems and listItems|length < 3 %} 
      {% set listItems = listItems|merge([obj]) %} 
     {% endif %} 
    {% endfor %} 
{% endfor %} 

fiddle

Es ist nicht schön. Es ist besser, wenn Sie das zufällige Array in Ihrem Controller vorbereiten.

Twig Random Referenz.

+0

zurückgeben Dies ist nicht korrekt, da Bob zweimal auftreten könnte – DarkBee

0

Wenn Sie nicht wollen, Zweig Erweiterung verwenden, können Sie dies versuchen:

{% set listItems = [ 
    { "name":"Bob","title":"Director","text":"Bob like burgers." }, 
    { "name":"Sue","title":"Manager","text":"Sue loves cash registers." }, 
    { "name":"Tim","title":"Assistant","text":"Tim doesn't like anything." } 
] %} 

{# Init the new random list #} 
{% set newListItems = [] %} 

{# loop for two random items #} 
{% for i in 0..1 %} 

    {# set random item #} 
    {% set item = random(listItems) %} 

    {# add item in random list #} 
    {% set newListItems = newListItems|merge([item]) %} 

    {# unset item in original list #} 
    {% set tempListItems = [] %} 
    {% for elt in listItems if elt != item %} 
    {% set tempListItems = tempListItems|merge([elt]) %} 
    {% endfor %} 
    {% set listItems = tempListItems %} 
{% endfor %} 

{{ dump(newListItems) }} 
1

Um eine zu bekommen zufälliges Array-Element, können Sie die keys verwenden, um die Schlüssel zu erhalten, wählen Sie dann eine zufällige mit random, und verwenden Sie diesen Wert als ein Index des gleichen Arrays. Alle, die mit nativem Zweig Filter

{# print a random element from `listItems` #} 
{{ dump(listItems[random(listItems | keys)]) }} 
Verwandte Themen