繁体   English   中英

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

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

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

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

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

不重复: {{ firstColor}} {{ secondColour }} {{thirdColour }} {{fourthColour }} 在页面上调用时,将始终返回 4 个不同的值。

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

尽管我同意您在某种 PHP 控制器中实际实现此目的的评论,并且该树枝用于模板而不是用于那种逻辑,但这是一个可能的解决方案。

您可以做的是创建一个randomColours数组,然后根据已添加到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM