Twig: in_array или подобное возможно в операторе if? - PullRequest
181 голосов
/ 18 сентября 2011

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

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

Ответы [ 5 ]

419 голосов
/ 18 сентября 2011

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

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

на

{% if myVar in someOtherArray|keys %}

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

74 голосов
/ 05 мая 2016

Просто чтобы прояснить некоторые вещи здесь.Принятый ответ не соответствует PHP in_array .

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

{% if myVar in myArray %}

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

{% if myVar not in myArray %}
9 голосов
/ 23 мая 2016

еще один пример после @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 %}
3 голосов
/ 18 февраля 2019

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

{% if var in ['foo', 'bar', 'beer'] %}
    ...
{% endif %}
1 голос
/ 12 июля 2016

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

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

Подробнее: http://twig.sensiolabs.org/doc/tags/for.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...