Twig - 如何随机化数组中的项目并循环它们?

问题描述 投票:0回答:5

如何随机化数组中的项目并循环它们?

{% for item in article.resources|shuffle|slice(1) %}
    ...
{% endfor %}

我收到此错误:

第 30 行“partials/content.twig”中的未知“shuffle”过滤器。

如果我使用random():

{% for item in random(article.resources|slice(1)) %}

没有任何回报。

有什么想法吗?

注意事项:

我不想使用 PHP 顺便说一句。

php arrays twig twig-filter
5个回答
6
投票

Twig Array Extension 已经有一个

shuffle()
过滤器(based on PHP
shuffle()


4
投票

做类似的事情:

$twig = new Twig_Environment($loader);
$function = new Twig_SimpleFunction('shuffle', function ($array) {
    shuffle($array);
    return $array;
});
$twig->addFunction($function);

在这里阅读更多相关信息

http://twig.sensiolabs.org/doc/advanced.html#functions


3
投票

我使用了 Twig Array Extension 来利用

|shuffle
。在我的安装中,扩展未加载。

将此添加到我的 config/services.yml 的服务下:

services:
    twig.extension.array:
                class: Twig_Extensions_Extension_Array
                tags: [twig.extension]

然后你可以使用:

{% for item in items|shuffle %}
    ...
{% endfor %}

0
投票

我知道这是一个老问题,但由于 Twig ArrayExtensions 似乎已被贬值,我想提供一种不带任何扩展的替代方法:

{% for item in article.resources|sort((a,b) => random(-1,1)) %}
  ...
{% endfor %}

-1
投票

我认为你必须删除它的切片部分。

尝试此代码并让我知道这是否有效。

{% for item in random(article.resources) %}

{% endfor %}

您可能希望在 for 循环中进行一些检查,以确保随机不会两次返回相同的项目。

© www.soinside.com 2019 - 2024. All rights reserved.