240

テンプレートエンジンとしてTwigを使用していて、とても気に入っています。しかし、今、私は私が見つけたよりも簡単な方法で間違いなく達成可能でなければならない状況で走りました。

私が今持っているのはこれです:

{% for myVar in someArray %}    
    {% set found = 0 %}
    {% for id, data in someOtherArray %}
        {% if id == myVar %}
            {{ myVar }} exists within someOtherArray.
            {% set found = 1 %} 
        {% endif %}
    {% endfor %}

    {% if found == 0 %}
        {{ myVar }} doesn't exist within someOtherArray.
    {% endif %}
{% endfor %}

私が探しているのは、次のようなものです。

{% for myVar in someArray %}    
    {% if myVar is in_array(array_keys(someOtherArray)) %}
       {{ myVar }} exists within someOtherArray.
    {% else %}
       {{ myVar }} doesn't exist within someOtherArray.
    {% endif %}
{% endfor %}

私がまだ見たことがないこれを達成する方法はありますか?

独自の拡張機能を作成する必要がある場合、テスト関数内でmyVarにアクセスするにはどうすればよいですか?

ご協力いただきありがとうございます!

4

7 に答える 7

505

2番目のコードブロックの2行目をから変更する必要があります

{% if myVar is in_array(array_keys(someOtherArray)) %}

{% if myVar in someOtherArray|keys %}

inは包含演算子であり、配列キーを返すフィルターをキーします

于 2011-09-18T09:25:49.403 に答える
123

ここでいくつかのことを片付けるためだけに。受け入れられた答えは、 PHPin_arrayと同じではありません。

PHP in_arrayと同じことを行うには、次の式を使用します。

{% if myVar in myArray %}

これを否定したい場合は、これを使用する必要があります。

{% if myVar not in myArray %}
于 2016-05-05T09:45:03.700 に答える
33

これを試して

{% if var in ['foo', 'bar', 'beer'] %}
    ...
{% endif %}
于 2019-02-18T09:30:48.070 に答える
10

@jakestaymanに続く別の例:

{% for key, item in row.divs %}
    {% if (key not in [1,2,9]) %} // eliminate element 1,2,9
        <li>{{ item }}</li>
    {% endif %}
{% endfor %}
于 2016-05-23T15:11:08.547 に答える
4

上記の答えは正しいですが、三項演算子を使用しているときに、よりユーザーフレンドリーなアプローチを見つけました。

{{ attachment in item['Attachments'][0] ? 'y' : 'n' }}

誰かがforeachを処理する必要がある場合は、

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
于 2019-10-02T05:28:08.467 に答える
3

それはあなたを助けるはずです。

{% for user in users if user.active and user.id not 1 %}
   {{ user.name }}
{% endfor %}

詳細:http ://twig.sensiolabs.org/doc/tags/for.html

于 2016-07-12T13:30:15.933 に答える
0

これが、最近のTwigのすべての可能性を備えた答えを完成させるためのものです。

このようなことを達成するには:

{% for myVar in someArray %}    
    {% if myVar in someOtherArray|keys %}
       {{ myVar }} exists within someOtherArray.
    {% else %}
       {{ myVar }} doesn't exist within someOtherArray.
    {% endif %}
{% endfor %}

https://twigfiddle.com/0b5crp

配列マッピングを使用して、次のワンライナーを使用することもできます:
(Twig>=1.41または>=2.10または任意の3.xバージョン)

{{ someArray|map(myVar => myVar ~ (myVar not in someOtherArray|keys ? ' doesn\'t') ~ ' exists within someOtherArray.')|join('\n') }}

これは非常によく似たものを出力します。

このTwigフィドルも参照してください:https ://twigfiddle.com/dlxj9g

于 2021-05-28T10:27:56.927 に答える