私は(少なくとも)常に互いに異なる2つの異なるランダム文字列を生成したいと思います。
{% set firstColour = random(['coral', 'pink', 'black', 'sand']) %}
{% set secondColour = random(['coral', 'pink', 'black', 'sand']) %}
{{ firstColour }}
{{ secondColour }}
私はそれが最初に等しい場合、「簡単な」溶液は、第2の色をリセットするだろうと思っ
{# before variables are called #}
{% if firstColour == secondColour %}
{% set secondColour = '' %}
{% set secondColour = random(['coral', 'pink', 'black', 'sand']) %}
{% endif %}
これは非常に実用的なまたは「クリーン」なようではありませんが、それはまた、単に動作しないだけでなく。小枝のマニュアルまたは他のスレッドでは、私は例外を除いて、ランダムな文字列を設定することについては何も見つけることができません。
これは、結果がランダムであることが重要です(ないスライス)と他の変数と等しくありません。結局、私は、同じページ上の別の変数を持つランダムな順序ですべての可能性を取得したいと思い、
これまでいずれかを繰り返すことなく:{{firstColor}}、{{secondColour}}、{{thirdColour}}、{{fourthColour}}ページに呼び出されたときに、常に4つの異なる値を返すことになります。
小枝の機能や拡張ビルトインを使用して達成するための方法はありますか?
私はあなたが実際にいくつかの並べ替えのPHPコントローラでこれを達成するようになったコメントに同意するだろう、とその小枝は論理のこれらの種類のテンプレート化していないためのものであるが、ここでは可能な解決策です。
あなたは何ができることは作成することでrandomColours
、配列を、次にフィルタすでにに追加されているものに基づいている色の配列うちrandomColours
一つ。
ここでは4色を表示するための結果のコードのようになります。
{% 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 %}
あなたは2つだけ、あなたの最初の例のようにしたい場合は、あなただけで切り替えることができます
{% for i in 1..colours | length %}
に
{% for i in 1..2 %}
ここでは4色の小枝のフィドルは次のとおりです。https://twigfiddle.com/ahtcuo
:そして、ここでは2つだけのためのものですhttps://twigfiddle.com/ahtcuo/2