web-dev-qa-db-fra.com

Brindille: in_array ou similaire possible dans une instruction if?

J'utilise Twig comme moteur de gabarit et je l'aime vraiment. Cependant, je me suis retrouvé dans une situation qui doit être réalisable d'une manière plus simple que celle que j'ai trouvée.

Voici ce que j'ai maintenant:

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

Ce que je recherche, c'est quelque chose de plus semblable à ceci:

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

Y a-t-il un moyen d'accomplir cela que je n'ai pas encore vu?

Si je dois créer ma propre extension, comment puis-je accéder à myVar dans la fonction de test?

Merci de votre aide!

173
sprain

Il vous suffit de changer la deuxième ligne de votre deuxième bloc de code de

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

à

{% if myVar in someOtherArray|keys %}

in est l'opérateur de confinement et keys un filtre qui renvoie les tableaux de tableaux.

403
Raffael

Juste pour effacer certaines choses ici. La réponse acceptée n'a pas le même effet que PHP in_array .

Pour faire la même chose que PHP in_array , utilisez l'expression suivante:

{% if myVar in myArray %}

Si vous voulez nier cela, vous devriez utiliser ceci:

{% if myVar not in myArray %}
68
Wim Mostmans

un autre exemple après @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 %}
9
Dung

Cela devrait vous aider.

{% for user in users if user.active and user.id not 1 %}
   {{ user.name }}
{% endfor %}

Plus d'infos: http://twig.sensiolabs.org/doc/tags/for.html

1
FDisk

Essaye ça

{% if var in ['foo', 'bar', 'beer'] %}
    ...
{% endif %}
0
Arthur Veselov