Zweig für Schleife für Arrays mit Schlüsseln

152

Ich benutze Twig und habe ein Array mit Schlüsseln wie diesen:

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

Und ich möchte den Schlüssel (1,2,3,8,9)und den Inhalt (alpha, bravo, charlie, delta, echo)in einer Schleife erhalten, um den gesamten Wert dieses Arrays zu erhalten.

Wie löse ich dieses Problem?

Guillaume
quelle
1
Haben Sie versucht, PHP-Schleifen zu durchsuchen? Verwendung foreachSchleife.
Josh
3
Es ist nicht in PHP, es ist in Twig in der Vorlagendatei!
Guillaume
3
Meinetwegen. Haben Sie versucht, nach TWIG-Loops zu suchen? twig.sensiolabs.org/doc/tags/for.html
Josh

Antworten:

322

Ich fand die Antwort:

{% for key,value in array_path %}
    Key : {{ key }}
    Value : {{ value }}
{% endfor %}
Guillaume
quelle
3
Hier ist ein Link zu den offiziellen Dokumenten: twig.sensiolabs.org/doc/tags/…
Kevin Jantzer
57

Es gibt dieses Beispiel auf der SensioLab-Seite des forTags:

<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
quelle
1
Dieses Beispiel iteriert nicht über die Array-Schlüssel, siehe die oben genannten
user2019515
15

Dies sind erweiterte Operationen (z. B. Sortieren, Umkehren) für eindimensionale und zweidimensionale Arrays im Twig-Framework:

1D Array

Ohne Schlüsselsortierung und Umkehrung

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

Schlüsselsortierung

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

Schlüsselsortierung und -umkehr

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

2D-Arrays

Ohne Schlüsselsortierung und Umkehrung

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

Schlüsselsortierung auf dem äußeren Array

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

Schlüsselsortierung auf äußeren und inneren Arrays

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

Schlüsselsortierung auf dem äußeren Array und Schlüsselsortierung und Umkehrung auf dem inneren Array

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

Schlüsselsortierung und Umkehrung auf dem äußeren Array und Schlüsselsortierung auf dem inneren Array

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

Schlüsselsortierung und -umkehr auf dem äußeren und inneren Array

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

Ich denke, Sie möchten das "Iterieren über Schlüssel und Werte" durchführen.

Wie das Dokument hier sagt, fügen Sie einfach "| keys" in die gewünschte Variable ein und es wird auf magische Weise passieren.

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

Es tut nie weh zu suchen, bevor man fragt :)

imcoddy
quelle
4
Sie haben in Ihrer Antwort kein Beispiel für die Verwendung von "| Schlüsseln" gezeigt.
Adambean
6
Ich gebe Ihnen 10, weil Sie 308 Punkte haben, aber Sie antworten "Es tut nie weh zu suchen, bevor Sie fragen" saugt, also nehme ich es heraus
Braian Mellor