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