Я использую 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 в тестовой функции?
Спасибо за вашу помощь!
Ответы:
Вам просто нужно изменить вторую строку вашего второго кодового блока с
в
in - оператор включения и ключей фильтр, который возвращает ключи массивов.
источник
{% if item not in array %}
и нет{% if not _entry.id in array %}
, поэтому отличается от этого{% if not var is null %}
.{% if someOtherArray.myVar is defined %}
( twig.sensiolabs.org/doc/tests/defined.html )Просто чтобы прояснить некоторые вещи здесь. Принятый ответ не соответствует PHP in_array .
Для того же, что и в PHP in_array, используйте следующее выражение:
Если вы хотите отрицать это, вы должны использовать это:
источник
in_array()
в ветке.Попробуй это
источник
другой пример, следующий за @jake stayman:
источник
Это должно помочь вам.
Дополнительная информация: http://twig.sensiolabs.org/doc/tags/for.html.
источник
Хотя приведенные выше ответы верны, я нашел более удобный подход при использовании троичного оператора.
Если кому-то нужно работать через foreach,
источник