Twig: in_array или аналогичный возможный внутри оператора if?

Я использую 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 в тестовой функции?

Спасибо за вашу помощь!

Ответ 1

Вам просто нужно изменить вторую строку второго блока кода из

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

к

{% if myVar in someOtherArray|keys %}

in является оператором сдерживания и keys фильтр, который возвращает ключи массивов.

Ответ 2

Просто чтобы прояснить некоторые вещи здесь. Ответ, который был принят, не делает то же самое, что PHP in_array.

Чтобы сделать то же самое, что и PHP in_array, используйте следующее выражение:

{% if myVar in myArray %}

Если вы хотите отменить это, вы должны использовать это:

{% if myVar not in myArray %}

Ответ 3

другой пример, следующий за @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 %}

Ответ 4

Попробуйте это

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

Ответ 5

Это должно помочь вам.

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

Дополнительная информация: http://twig.sensiolabs.org/doc/tags/for.html

Ответ 6

Хотя приведенные выше ответы верны, я нашел более удобный подход при использовании троичного оператора.

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

Если кому-то нужно работать через foreach, тогда

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}