web-dev-qa-db-ja.com

小枝:ifステートメント内でin_arrayまたは同様のことが可能ですか?

テンプレートエンジンとして 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にアクセスするにはどうすればいいですか?

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

181
sprain

2番目のコードブロックの2行目を次のように変更するだけです。

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

{% if myVar in someOtherArray|keys %}

in は包含演算子で、 keys は配列のキーを返すフィルタです。

416
Raffael

ここでいくつかのことを明確にします。受け入れられた答えはPHP in_arrayと同じではありません。

PHP in_arrayと同じことをするには、次の式を使います。

{% if myVar in myArray %}

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

{% if myVar not in myArray %}
74
Wim Mostmans

@jake staymanの他の例:

{% for key, item in row.divs %}
    {% if (key not in [1,2,9]) %} // eliminate element 1,2,9
        <li>{{ item }}</li>
    {% endif %}
{% endfor %}
9
Dung

これを試して

{% if var in ['foo', 'bar', 'beer'] %}
    ...
{% endif %}
2
Arthur Veselov

それはあなたを助けるでしょう。

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

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

1
FDisk