从Twig的列表中获取两个随机项

时间:2016-07-13 00:17:21

标签: php twig

我在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的方法来做这件事,但我可能会想错了。

5 个答案:

答案 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 %}

fiddle

这不漂亮。如果你在控制器中准备随机数组会更好。

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