web-dev-qa-db-fra.com

Twig pour la boucle pour les tableaux avec des clés

J'utilise Twig et j'ai un tableau avec des clés comme celle-ci:

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

Et je voudrais obtenir la clé (1,2,3,8,9) et le contenu (alpha, bravo, charlie, delta, echo) dans une boucle pour obtenir toute la valeur de ce tableau.

Comment résoudre ce problème?

140
Guillaume

J'ai trouvé la réponse:

{% for key,value in array_path %}
    Key : {{ key }}
    Value : {{ value }}
{% endfor %}
303
Guillaume

Il y a cet exemple dans la page SensioLab sur la balise for:

<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

53
dkinzer

Ce sont également des options étendues pour les tableaux 1D et 2D dans Twig:

Tableau 1D

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

Tableaux 2D

{% for key1, value1 in 2D_array %}
    {% for key2, value2 in 2D_array[key1] %}
        <div>{{ key2 }}</div>
        <div>{{ value2 }}</div>
    {% endfor %}
{% endfor %}

{% for key1, value1 in 2D_array %}
    {% for key2, value2 in 2D_array[key1] %}
        <div>{{ key2 }}</div>
        <div>{{ value2 }}</div>
    {% endfor %}
{% endfor %}

{% for key1, value1 in 2D_array|keys|sort %}
    {% for key2, value2 in 2D_array[key1]|keys|sort %}
        <div>{{ key2 }}</div>
        <div>{{ value2 }}</div>
    {% endfor %}
{% endfor %}

{% for key1, value1 in 2D_array|keys|sort|reverse %}
    {% for key2, value2 in 2D_array[key1]|keys|sort|reverse %}
        <div>{{ key2 }}</div>
        <div>{{ value2 }}</div>
    {% endfor %}
{% endfor %}
3
Emma

Je suppose que vous voulez faire le "Itération sur les clés et les valeurs"

Comme le dit la documentation ici , ajoutez simplement "| clés" dans la variable souhaitée et cela se produira comme par magie.

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

Il n'est jamais mauvais de chercher avant de demander :)

2
imcoddy