Php 在细枝中生成不带';不要重复

Php 在细枝中生成不带';不要重复,php,random,twig,Php,Random,Twig,我想生成(至少)两个不同的随机字符串,它们总是彼此不同 {% set firstColour = random(['coral', 'pink', 'black', 'sand']) %} {% set secondColour = random(['coral', 'pink', 'black', 'sand']) %} {{ firstColour }} {{ secondColour }} 我认为一个“简单”的解决方案是重置第二种颜色,如果它等于第一种颜色 {# before va

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

{% 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}}{{SecondColor}}{{ThirdColor}}{{FourthColor}}在页面上调用时,将始终返回4个不同的值


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

尽管我同意您在某种PHP控制器中实际实现这一点的评论,Twig是用于模板而不是用于此类逻辑,但这里有一个可能的解决方案

您可以做的是创建一个
randomColor
数组,然后根据已添加到
randomColor
数组中的内容,输出您拥有的颜色数组

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

{% 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 %}

这是四种颜色的小树枝小提琴:

这里是一个仅供两人使用的工具:

使用php进行操作,将其发送给twigKeep,记住Twig是一个模板引擎-是的,一个相当强大的引擎,但仍然适合模板化。php
shuffle
array\u pop
非常感谢您提供的视角和全面的答案。这非常有效,您的回答帮助我理解了该方法,以及如何在这种情况下甚至不同的情况下使用它。
{% for i in 1..2 %}