我在Twig中有一个项目列表,看起来像这样。
{% 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." }
] %}
我想在Twig中随机获得三个可用人员中的两个,这样我就可以在我的网站块中显示两个配置文件。 (就像一个旋转的双重功能!)
我找不到使用Twig Docs的方法来做这件事,但我可能会想错了。
答案 0 :(得分:3)
您可以安装array extension,然后将shuffle
与@ user1453870的答案合并:
{% for item in listItems|shuffle|slice(0,2) %}
答案 1 :(得分:2)
要获取随机数组项,可以使用keys获取密钥,然后选择random的随机数,并将该值用作同一数组的索引。所有那些使用原生树枝过滤器
{# print a random element from `listItems` #}
{{ dump(listItems[random(listItems | keys)]) }}
答案 2 :(得分:0)
您可以使用切片过滤器。
{% for item in listItems|slice(0,2) %}
{{ item }}
{% endfor %}
有关更多信息,请参阅此处:http://twig.sensiolabs.org/doc/filters/slice.html
希望这有帮助!
答案 3 :(得分: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 %}
这不漂亮。如果你在控制器中准备随机数组会更好。
Twig Random参考。
答案 4 :(得分:0)
如果您不想使用Twig Extension,可以试试这个:
{% 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) }}