Twig for loop pour tableaux avec clés

152

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?

Guillaume
la source
2
Avez-vous essayé de rechercher des boucles PHP? Utilisez la foreachboucle.
Josh
3
Ce n'est pas en PHP, c'est en Twig dans le fichier de modèle!
Guillaume
4
C'est suffisant. Avez-vous essayé de rechercher des boucles TWIG? twig.sensiolabs.org/doc/tags/for.html
Josh

Réponses:

324

J'ai trouvé la réponse:

{% for key,value in array_path %}
    Key : {{ key }}
    Value : {{ value }}
{% endfor %}
Guillaume
la source
4
Voici un lien vers la documentation officielle: twig.sensiolabs.org/doc/tags/…
Kevin Jantzer
58

Il y a cet exemple dans la page SensioLab sur la forbalise:

<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
la source
2
Cet exemple n'itère pas les clés du tableau, voir celles ci
user2019515
15

Ce sont des opérations étendues (par exemple, trier, inverser) pour les tableaux unidimensionnels et bidimensionnels dans le framework Twig:

Baie 1D

Sans tri et inversion de clé

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

Tri des clés

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

Trier et inverser les clés

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

Tableaux 2D

Sans tri et inversion de clé

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

Tri de clé sur matrice externe

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

Tri de clé sur les tableaux externes et internes

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

Tri de clé sur le tableau externe et tri de clé et inversé sur le tableau intérieur

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

Tri et inversion de clés sur le tableau externe et tri de clés sur le tableau intérieur

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

Trier et inverser les clés sur les baies externe et interne

{% 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
la source
2

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

Comme le dit le document ici , ajoutez simplement "| clés" dans la variable que vous voulez et cela se produira comme par magie.

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

Cela ne fait jamais de mal de chercher avant de demander :)

imcoddy
la source
5
Vous n'avez pas montré d'exemple d'utilisation de "touches |" dans votre réponse.
Adambean
7
Je vous donne 10 parce que vous avez 308 points, mais vous répondez "Ça ne fait jamais de mal de chercher avant de demander" ça craint, alors je le retire
Braian Mellor