在 Twig 中生成不重复的随机字符串
Generate random strings in Twig that don't repeat
我想生成(至少)两个始终彼此不同的不同随机字符串。
{% set firstColour = random(['coral', 'pink', 'black', 'sand']) %}
{% set secondColour = random(['coral', 'pink', 'black', 'sand']) %}
{{ firstColour }}
{{ secondColour }}
我认为 "easy" 解决方案是重置第二种颜色,如果它与第一种颜色相同
{# before variables are called #}
{% if firstColour == secondColour %}
{% set secondColour = '' %}
{% set secondColour = random(['coral', 'pink', 'black', 'sand']) %}
{% endif %}
这不仅看起来不太实用或 "clean",而且根本行不通。在 twig 文档或其他线程上,我找不到任何关于设置有异常的随机字符串的信息。
重要的是结果是随机的(不是切片)并且不等于其他变量。最终,我想以随机顺序获得所有可能性,并在同一页面上使用单独的变量,
从不重复:{{ firstColor}} {{ secondColour }} {{ thirdColour }} {{ fourthColour }} 在页面上调用时,总是 return 4 个不同的值。
有没有办法利用Twig的内置函数或扩展来实现?
尽管我同意您在某种 PHP 控制器中实际实现此目的的评论,并且该树枝用于模板而不是用于此类逻辑,但这是一个可能的解决方案.
你可以做的是创建一个 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 %}
这是四种颜色的树枝 fiddle:https://twigfiddle.com/ahtcuo
这是一个只有两个人的:https://twigfiddle.com/ahtcuo/2
我想生成(至少)两个始终彼此不同的不同随机字符串。
{% set firstColour = random(['coral', 'pink', 'black', 'sand']) %}
{% set secondColour = random(['coral', 'pink', 'black', 'sand']) %}
{{ firstColour }}
{{ secondColour }}
我认为 "easy" 解决方案是重置第二种颜色,如果它与第一种颜色相同
{# before variables are called #}
{% if firstColour == secondColour %}
{% set secondColour = '' %}
{% set secondColour = random(['coral', 'pink', 'black', 'sand']) %}
{% endif %}
这不仅看起来不太实用或 "clean",而且根本行不通。在 twig 文档或其他线程上,我找不到任何关于设置有异常的随机字符串的信息。
重要的是结果是随机的(不是切片)并且不等于其他变量。最终,我想以随机顺序获得所有可能性,并在同一页面上使用单独的变量,
从不重复:{{ firstColor}} {{ secondColour }} {{ thirdColour }} {{ fourthColour }} 在页面上调用时,总是 return 4 个不同的值。
有没有办法利用Twig的内置函数或扩展来实现?
尽管我同意您在某种 PHP 控制器中实际实现此目的的评论,并且该树枝用于模板而不是用于此类逻辑,但这是一个可能的解决方案.
你可以做的是创建一个 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 %}
这是四种颜色的树枝 fiddle:https://twigfiddle.com/ahtcuo
这是一个只有两个人的:https://twigfiddle.com/ahtcuo/2