Używam Twiga jako silnika szablonów i bardzo mi się podoba. Teraz jednak natknąłem się na sytuację, która z pewnością musi być osiągnięta w prostszy sposób, niż znalazłem.
Mam teraz:
{% 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 %}
To, czego szukam, to coś więcej:
{% 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 %}
Czy istnieje sposób na osiągnięcie tego, czego jeszcze nie widziałem?
Jeśli muszę utworzyć własne rozszerzenie, jak mogę uzyskać dostęp do myVar w ramach funkcji testowej?
Dzięki za pomoc!
Odpowiedzi:
Musisz tylko zmienić drugi wiersz drugiego bloku kodu z
do
in to operator przechowujący i klucze filtr, który zwraca klucze tablic.
źródło
{% if item not in array %}
i nie{% if not _entry.id in array %}
, więc różni się od tego{% if not var is null %}
.{% if someOtherArray.myVar is defined %}
( twig.sensiolabs.org/doc/tests/defined.html )Żeby wyczyścić kilka rzeczy tutaj. Odpowiedź, która została zaakceptowana, nie jest taka sama jak PHP in_array .
Aby zrobić to samo co PHP in_array, użyj następującego wyrażenia:
Jeśli chcesz to zanegować, powinieneś użyć tego:
źródło
in_array()
gałązce.Spróbuj tego
źródło
inny przykład następujący po @jake stayman:
źródło
To powinno ci pomóc.
Więcej informacji: http://twig.sensiolabs.org/doc/tags/for.html
źródło
Chociaż powyższe odpowiedzi są prawidłowe, znalazłem coś bardziej przyjaznego dla użytkownika podczas korzystania z operatora trójskładnikowego.
Jeśli więc ktoś musi przejść przez foreach,
źródło