2011-09-18 17 views
154

Sto usando Twig come motore dei modelli e lo amo davvero. Tuttavia, ora ho corso in una situazione che sicuramente deve essere realizzata in un modo più semplice di quello che ho trovato.Twig: in_array o simile possibile all'interno di if statement?

Quello che ho in questo momento è questa:

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

Quello che sto cercando è qualcosa di più simile a questo:

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

C'è un modo per ottenere questo risultato, che non ho visto ancora?

Se è necessario creare una propria estensione, come posso accedere a myVar all'interno della funzione di test?

Grazie per il vostro aiuto!

+3

Яaffael1984 ha la risposta giusta. Ma quello che stai cercando di fare dovrebbe essere fatto nel controller, non nella vista! Formattare l'array e quindi dare una visione pulita alla vista per la migliore leggibilità. – Vivien

+3

Suppongo che dipenda davvero dal contesto in cui la via ha più senso, non credi? – sprain

risposta

357

Non vi resta che modificare la seconda riga del secondo codice isolato da

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

a

{% if myVar in someOtherArray|keys %} 

in è il contenimento operatore e keys un filtro che restituisce un chiavi array.

+87

Se vuoi ottenere lo stesso effetto di in_array() in PHP, usa il filtro chiavi – Burgi

+16

+ 1 E anche la negazione è '{% se non nell'array%}' e non '{% se non _entry.id in array %} ', quindi è diverso da questo' {% se non var è null%} '. – insertusernamehere

+8

Puoi anche usare definito: '{% se someOtherArray.myVar è definito%}' (http://twig.sensiolabs.org/doc/tests/defined.html) – tight

43

Solo per cancellare alcune cose qui. La risposta accettata non è la stessa di PHP in_array.

a fare lo stesso PHP in_array uso seguente espressione:

{% if myVar in myArray %} 

Se si vuole negare questo si dovrebbe usare questo:

{% if myVar not in myArray %} 
+1

Questi due punti sembrano essere stati coperti dai commenti sulla risposta accettata nel 2012. Questa risposta non sembra aggiungere nulla in più. –

+5

@William Isted questa risposta aggiunge il modo corretto di fare PHP 'in_array()' in twig. – elvismdev

5

un altro esempio seguente @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 %}