wake-up-neo.net

Twig: in_array oder ähnliches in if-Anweisung möglich?

Ich benutze Twig als Template-Engine und ich liebe es wirklich. Nun bin ich jedoch in eine Situation geraten, die definitiv auf einfachere Weise erreichbar sein muss, als ich festgestellt habe.

Was ich jetzt habe, ist folgendes:

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

Was ich suche, ist ungefähr so:

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

Gibt es einen Weg, dies zu erreichen, was ich noch nicht gesehen habe?

Wie kann ich innerhalb der Testfunktion auf myVar zugreifen, wenn ich eine eigene Erweiterung erstellen muss?

Danke für Ihre Hilfe!

173
sprain

Sie müssen nur die zweite Zeile Ihres zweiten Codeblocks von ändern

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

zu

{% if myVar in someOtherArray|keys %}

in ist der Containment-Operator und keys ein Filter, der Arrays-Keys zurückgibt.

403
Raffael

Nur um hier ein paar Dinge zu klären. Die Antwort, die akzeptiert wurde, stimmt nicht mit PHP in_array überein.

Um dasselbe zu tun wie PHP in_array , verwenden Sie folgenden Ausdruck:

{% if myVar in myArray %}

Wenn Sie dies negieren möchten, sollten Sie Folgendes verwenden:

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

ein weiteres Beispiel, das @jake stayman folgt: 

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

Es sollte dir helfen.

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

Weitere Informationen: http://twig.sensiolabs.org/doc/tags/for.html

1
FDisk

Versuche dies

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