Ramita para bucle para matrices con claves

152

Uso Twig y tengo una matriz con teclas como esta:

array[1] = "alpha"
array[2] = "bravo"
array[3] = "charlie"
array[8] = "delta"
array[9] = "echo"

Y me gustaría obtener la clave (1,2,3,8,9)y el contenido (alpha, bravo, charlie, delta, echo)en un bucle para obtener todo el valor de esta matriz.

¿Cómo resuelvo este problema?

Guillaume
fuente
1
¿Intentaste buscar bucles PHP? Use el foreachbucle.
Josh
3
¡No está en PHP, está en Twig en el archivo de plantilla!
Guillaume
3
Lo suficientemente justo. ¿Intentaste buscar bucles TWIG? twig.sensiolabs.org/doc/tags/for.html
Josh

Respuestas:

324

Encontré la respuesta:

{% for key,value in array_path %}
    Key : {{ key }}
    Value : {{ value }}
{% endfor %}
Guillaume
fuente
3
Aquí hay un enlace a los documentos oficiales: twig.sensiolabs.org/doc/tags/…
Kevin Jantzer
57

Hay este ejemplo en la página de SensioLab en la foretiqueta:

<h1>Members</h1>
<ul>
    {% for key, user in users %}
        <li>{{ key }}: {{ user.username|e }}</li>
    {% endfor %}
</ul>

http://twig.sensiolabs.org/doc/tags/for.html#iterating-over-keys

dkinzer
fuente
1
Este ejemplo no se repite sobre las claves de la matriz, consulte las anteriores
user2019515
15

Estas son operaciones extendidas (por ejemplo, ordenar, invertir) para matrices unidimensionales y bidimensionales en Twig Framework:

Matriz 1D

Sin clasificación de teclas y reversa

{% for key, value in array_one_dimension %}
    <div>{{ key }}</div>
    <div>{{ value }}</div>
{% endfor %}

Clasificación de clave

{% for key, value in array_one_dimension|keys|sort %}
    <div>{{ key }}</div>
    <div>{{ value }}</div>
{% endfor %}

Clasificación de teclas y reversa

{% for key, value in array_one_dimension|keys|sort|reverse %}
    <div>{{ key }}</div>
    <div>{{ value }}</div>
{% endfor %}

Matrices 2D

Sin clasificación de teclas y reversa

{% for key_a, value_a in array_two_dimension %}
    {% for key_b, value_b in array_two_dimension[key_a] %}
        <div>{{ key_b }}</div>
        <div>{{ value_b }}</div>
    {% endfor %}
{% endfor %}

Clasificación de clave en matriz externa

{% for key_a, value_a in array_two_dimension|keys|sort %}
    {% for key_b, value_b in array_two_dimension[key_a] %}
        <div>{{ key_b }}</div>
        <div>{{ value_b }}</div>
    {% endfor %}
{% endfor %}

Clasificación de claves en matrices externas e internas

{% for key_a, value_a in array_two_dimension|keys|sort %}
    {% for key_b, value_b in array_two_dimension[key_a]|keys|sort %}
        <div>{{ key_b }}</div>
        <div>{{ value_b }}</div>
    {% endfor %}
{% endfor %}

Clasificación de clave en matriz externa y clasificación de clave e inversión en matriz interna

{% for key_a, value_a in array_two_dimension|keys|sort %}
    {% for key_b, value_b in array_two_dimension[key_a]|keys|sort|reverse %}
        <div>{{ key_b }}</div>
        <div>{{ value_b }}</div>
    {% endfor %}
{% endfor %}

Clasificación de claves y reversa en matriz externa y clasificación de claves en matriz interna

{% for key_a, value_a in array_two_dimension|keys|sort|reverse %}
    {% for key_b, value_b in array_two_dimension[key_a]|keys|sort %}
        <div>{{ key_b }}</div>
        <div>{{ value_b }}</div>
    {% endfor %}
{% endfor %}

Clasificación de teclas y reversa en matriz externa e interna

{% for key_a, value_a in array_two_dimension|keys|sort|reverse %}
    {% for key_b, value_b in array_two_dimension[key_a]|keys|sort|reverse %}
        <div>{{ key_b }}</div>
        <div>{{ value_b }}</div>
    {% endfor %}
{% endfor %}
Emma
fuente
2

Supongo que quieres hacer el "Iterating over Keys and Values"

Como dice el documento aquí , simplemente agregue "| keys" en la variable que desee y mágicamente sucederá.

{% for key, user in users %}
    <li>{{ key }}: {{ user.username|e }}</li>
{% endfor %}

Nunca está de más buscar antes de preguntar :)

imcoddy
fuente
44
No ha mostrado un ejemplo de uso de "teclas" en su respuesta.
Adambean
66
Te doy 10 porque tienes 308 puntos, pero respondes "Nunca está de más buscar antes de preguntar" es una mierda, así que lo saco
Braian Mellor