2016-07-13 22 views
2

私はTwigの項目のリストを持っています。Twigのリストから2つのランダムな項目を取得

{% 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." } 
] %} 

私は私のサイトのブロックに2つのプロファイルを表示できるように小枝にランダムに利用可能な3つの人々のうちの2つを取得したいと思います。 (回転ダブル機能のように!)

これを行うにはTwig Docsを使用する方法を見つけることができませんが、私は間違っていると思っているかもしれません。

+2

とあなたは[配列](https://github.com/twigphp/Twig-extensions/blob/master/lib/Twig/Extensions/Extension/Array.php)をインストールすることができますshuffleと@ user1453870の答えを組み合わせてください: '{listItems | shuffle | slice(0,2)%}内のアイテムの% '' – DarkBee

+0

公式ドキュメントの配列拡張:http://twig.sensiolabs.org/doc/extensions/ array.html –

+0

これは正解で、うまくいきました。これを答えとしてマークするにはどうすればいいですか、@ダークビーですか? – fiddlestacks

答えて

1

あなたはarray extensionをインストールしてから、@のuser1453870の答えをshuffleを組み合わせることができます

{% for item in listItems|shuffle|slice(0,2) %} 
0

スライスフィルタを使用できます。

{% for item in listItems|slice(0,2) %} 
{{ item }} 
{% endfor %} 

もっとに関する情報についてはこちらをご覧ください:http://twig.sensiolabs.org/doc/filters/slice.html

・ホープ、このことができます!

+1

これはランダムなものではなく最初の2つの要素を常に返します – DarkBee

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

それはかなりありません。あなたのコントローラでランダムな配列を準備する方が良いでしょう。

Twig Randomを参照してください。

+0

これは 'Bob'が2回発生する可能性があるため正しくありません – DarkBee

0

あなたは小枝拡張子を使用したくない場合、あなたはこれを試すことができます。

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

取得するにはランダム配列項目の場合は、keysを使用してキーを取得し、randomでランダムなものを選択し、その値を同じ配列のインデックスとして使用できます。すべてのそのネイティブ小枝フィルタ

{# print a random element from `listItems` #} 
{{ dump(listItems[random(listItems | keys)]) }} 
関連する問題