【问题标题】:Generate random strings in Twig that don't repeat在 Twig 中生成不重复的随机字符串
【发布时间】:2020-06-22 10:24:36
【问题描述】:

我想生成(至少)两个不同的随机字符串,它们总是彼此不同。

{% set firstColour = random(['coral', 'pink', 'black', 'sand']) %}
{% set secondColour = random(['coral', 'pink', 'black', 'sand']) %}


{{ firstColour }} 
{{ secondColour }}

我认为一个“简单”的解决方案是重置第二种颜色(如果它等于第一种颜色)

{# before variables are called #} 
{% if firstColour == secondColour %}
    {% set secondColour = '' %}
    {% set secondColour = random(['coral', 'pink', 'black', 'sand']) %}
{% endif %}

这不仅看起来不是很实用或“干净”,而且也不起作用。在 twig 文档或其他线程上,我找不到任何关于设置带有异常的随机字符串的信息。

结果是随机的(不是切片)并且不等于其他变量,这一点很重要。最终,我想以随机顺序在同一页面上使用单独的变量获得所有可能性,

从不重复:{{ firstColor}} {{ secondColour }} {{ thirdColour }} {{ FourthColour }} 在页面上调用时,总是会返回 4 个不同的值。

有没有办法使用Twig的内置函数或扩展来实现?

【问题讨论】:

  • 用php做,发给twig
  • 请记住,Twig 是一个模板引擎 - 是的,一个相当强大的引擎,但仍然适用于模板。
  • PHP shufflearray_pop

标签: php random twig


【解决方案1】:

虽然我同意你必须在某种 PHP 控制器中实际实现这一点的 cmets,并且该 twig 用于模板而不是用于那些逻辑,但这是一个可能的解决方案。

您可以做的是创建一个randomColours 数组,然后filter 根据已经添加到randomColours 的颜色数组中的颜色。

这是显示四种颜色的结果代码:

{% set colours = ['coral', 'pink', 'black', 'sand'] %}
{% set randomColours = [] %}
{% for i in 1..colours | length %}
  {% set randomColours = randomColours | merge([random(colours | filter(value => value not in randomColours))]) %}
{% endfor %}

{% for colour in randomColours %}
 {{ colour }}
{% endfor %}

如果您在最初的示例中只想要两个,您可以从

{% for i in 1..colours | length %}

{% for i in 1..2 %}

这是四种颜色的树枝小提琴:https://twigfiddle.com/ahtcuo
这是只供两个人使用的一个:https://twigfiddle.com/ahtcuo/2

【讨论】:

  • 非常感谢您的观点和彻底的回答。这非常有效,您的回答帮助我了解了该方法以及如何在这种甚至不同的情况下使用它。
猜你喜欢
  • 2010-12-07
  • 2017-04-05
  • 2017-01-06
  • 2015-12-30
  • 1970-01-01
  • 2015-08-16
  • 2014-02-05
  • 1970-01-01
相关资源
最近更新 更多