2011-09-18 12 views
154

Używam Twig jako mechanizmu szablonowego i naprawdę to kocham. Teraz jednak biegnę w sytuacji, która zdecydowanie musi być wykonalna w prostszy sposób, niż znalazłem.Gałązka: in_array lub podobne możliwe wewnątrz instrukcji if?

Co mam teraz to:

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

Co szukam jest czymś więcej tak:

{% 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 do osiągnięcia tego, czego nie widzieliście jeszcze?

Jeśli muszę utworzyć własne rozszerzenie, w jaki sposób mogę uzyskać dostęp do myVar w ramach funkcji testu?

Dzięki za pomoc!

+3

Яaffael1984 ma właściwą odpowiedź. Ale to, co próbujesz zrobić, powinno być zrobione w kontrolerze, a nie w widoku! Sformatuj tablicę, a następnie nadaj widokowi czysty wygląd, aby uzyskać jak najlepszą czytelność. – Vivien

+3

Przypuszczam, że to naprawdę zależy od kontekstu, który sposób ma więcej sensu, nie sądzisz? – sprain

Odpowiedz

357

Po prostu trzeba zmienić drugą linię drugiego kodu bloku z

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

do

{% if myVar in someOtherArray|keys %} 

in jest powstrzymywanie-operator i keys filtr, który zwraca tablice klucze.

+87

Jeśli chcesz osiągnąć to samo, co in_array() w PHP, ommit filtr klawiszy – Burgi

+16

+ 1 A także negacja to '{% jeśli element nie jest w tablicy%}', a nie '{% jeśli nie _entry.id w tablicy %} ', więc różni się od tego' {% if not var is null%} '. – insertusernamehere

+8

Można również użyć zdefiniowanego: '{%, jeśli zdefiniowano innyOrnikZamów.myVar%}' (http://twig.sensiolabs.org/doc/tests/defined.html) – tight

43

Tylko po to, by wyczyścić niektóre rzeczy. Odpowiedź, która została zaakceptowana, nie jest taka sama jak w przypadku PHP in_array.

Aby zrobić to samo jak PHP in_array stosowania następującego wyrażenia:

{% if myVar in myArray %} 

Jeśli chcesz negować tego należy użyć tego:

{% if myVar not in myArray %} 
+1

Te dwa punkty wydają się być objęte komentarzami o zaakceptowanej odpowiedzi w 2012 roku. Ta odpowiedź nie wydaje się dodawać niczego więcej. –

+5

@William Isted to odpowiedź dodaje właściwy sposób na PHP 'in_array()' w gałązce. – elvismdev

5

kolejny przykład następujący @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 %} 
Powiązane problemy