小枝:in_arrayまたはifステートメント内で同様の可能性?


207

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にアクセスするにはどうすればよいですか?

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


3
Яaffael1984には正しい答えがあります。しかし、あなたがしようとしていることは、ビューではなくコントローラで行われるべきです!配列をフォーマットし、読みやすくするためにビューにクリーンなものを与えます。
ビビアン

6
どちらがより意味のある文脈に依存しているのでしょうか?
捻挫

回答:


459

あなたは2番目のコードブロックの2行目を

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

{% if myVar in someOtherArray|keys %}

封じ込めオペレータとなるキーが配列キーを返すフィルタ。


109
PHPでin_array()と同じようにしたい場合は、キーフィルターを省略します
Burgi

24
+ 1も否定はされ{% if item not in array %}ない{% if not _entry.id in array %}ので、これとは異なるのです{% if not var is null %}
insertusernamehere

8
また、definedを使用することもできます:{% if someOtherArray.myVar is defined %}twig.sensiolabs.org/doc/tests/defined.html
タイトな

90

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

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

{% if myVar in myArray %}

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

{% if myVar not in myArray %}

1
これらの2つの点は、2012年に承認された回答に関するコメントでカバーされているようです。この回答は、何も追加しないようです。
ウィリアムIsted

7
@William Istedこの答えは、in_array()小枝でPHPを実行する正しい方法を追加します。
elvismdev 2017

2
@WilliamIsted次に、その受け入れられた回答が正しくなるように編集する必要があります。
user1032531

3
コメントは削除される可能性がはるかに高いため、コメントで指定された回答は実際の回答に変換することをお勧めします。
Nathan Arthur

^-削除または単に無視
Cid


10

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


0

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

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

誰かがforeachに取り組む必要がある場合、

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.