【问题标题】:Twig - How to randomise items in the array and loop them?Twig - 如何随机化数组中的项目并循环它们?
【发布时间】:2016-11-16 10:13:10
【问题描述】:

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

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

我收到此错误:

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

如果我使用random()

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

什么都不返回。

有什么想法吗?

注意事项:

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

【问题讨论】:

  • 定义一个叫做shuffle的twig函数,并在这个函数中使用php shuffle。 stackoverflow.com/questions/13277444/…
  • 请记住php shuffle 使用引用并且没有返回值。
  • I don't want to use PHP btw. 那么你没有完成它。如果 twig 没有 shuffle 之类的东西,则必须在 twig 中创建一个函数(用 php 编写)。而random 会给你一个随机条目,你不能循环这个,因为random 可能会在下一次迭代中给出相同的结果
  • 为什么不想在控制器里做呢?

标签: php arrays twig twig-filter


【解决方案1】:

Twig Array Extension 已经有一个 shuffle() 过滤器(based 在 PHP 上 shuffle()

【讨论】:

【解决方案2】:

做这样的事情:

$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

【讨论】:

  • 没什么,但Twig Array Extension 是更好的方法;)现在没有
  • 通过安装扩展对其进行了排序。谢谢! :-)
【解决方案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 %}

【讨论】:

    【解决方案4】:

    我认为您将不得不删除其中的 slice 部分。

    试试这个代码,让我知道它是否有效。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 2020-12-16
      相关资源
      最近更新 更多