Estoy usando Twig como motor de plantillas y realmente me encanta. Sin embargo, ahora me he encontrado en una situación que definitivamente debe ser posible de una manera más simple de lo que he encontrado.
Lo que tengo ahora es esto:
{% 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 %}
Lo que estoy buscando es algo más como esto:
{% 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 %}
¿Hay alguna manera de lograr esto que aún no he visto?
Si necesito crear mi propia extensión, ¿cómo puedo acceder a myVar dentro de la función de prueba?
¡Gracias por tu ayuda!
Respuestas:
Solo tiene que cambiar la segunda línea de su segundo bloque de código de
a
in es el operador de contención y las claves de un filtro que devuelve una matriz de claves.
fuente
{% if item not in array %}
y no{% if not _entry.id in array %}
, por lo que es diferente de esto{% if not var is null %}
.{% if someOtherArray.myVar is defined %}
( twig.sensiolabs.org/doc/tests/defined.html )Solo para aclarar algunas cosas aquí. La respuesta que se aceptó no hace lo mismo que PHP in_array .
Para hacer lo mismo que PHP in_array, use la siguiente expresión:
Si desea negar esto, debe usar esto:
fuente
in_array()
en rama.Prueba esto
fuente
otro ejemplo que sigue a @jake stayman:
fuente
Te debería ayudar.
Más información: http://twig.sensiolabs.org/doc/tags/for.html
fuente
Aunque las respuestas anteriores son correctas, encontré algo más amigable al usar el operador ternario.
Si alguien necesita trabajar a través de foreach entonces,
fuente