261 votes

Twig : in_array ou similaire possible dans l'instruction if ?

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

Ce que j'ai pour l'instant, c'est ceci :

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

Existe-t-il un moyen d'y parvenir 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 !

6 votes

Affael1984 a la bonne réponse. Mais ce que vous essayez de faire devrait être fait dans le contrôleur, pas dans la vue ! Formatez votre tableau et ensuite donnez une chose propre à la vue pour une meilleure lisibilité.

7 votes

Je suppose que cela dépend vraiment du contexte et qu'il est plus logique de choisir l'une ou l'autre voie, n'est-ce pas ?

6voto

marius.cdm Points 76

Disponible à partir de Twig 1.7

{# evaluates to true if the foo variable is iterable #}
{% if users is iterable %}
    {% for user in users %}
        Hello {{ user }}!
    {% endfor %}
{% else %}
    {# users is probably a string #}
    Hello {{ users }}!
{% endif %}

Mieux vaut tard que jamais.

3voto

FDisk Points 2264

Cela devrait vous aider.

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

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

2voto

Al Kativo Points 83

{% if myVar in myArray %} sans clés m'aide

0voto

7ochem Points 2025

En voici un pour compléter les réponses avec toutes les possibilités qu'offre Twig aujourd'hui :

Pour parvenir à ce résultat :

{% for myVar in someArray %}    
    {% if myVar in someOtherArray|keys %}
       {{ myVar }} exists within someOtherArray.
    {% else %}
       {{ myVar }} doesn't exist within someOtherArray.
    {% endif %}
{% endfor %}

( https://twigfiddle.com/0b5crp )

Vous pouvez également utiliser cartographie des tableaux et ont le one-liner suivant :
(Twig >= 1.41 ou >= 2.10 ou toute version 3.x)

{{ someArray|map(myVar => myVar ~ (myVar not in someOtherArray|keys ? ' doesn\'t') ~ ' exists within someOtherArray.')|join('\n') }}

Ce qui donne quelque chose d'assez similaire.

Voir aussi ce violon Twig : https://twigfiddle.com/dlxj9g

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X