Twig for loop para matrizes com chaves

152

Eu uso o Twig e tenho uma matriz com chaves como esta:

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

E eu gostaria de obter a chave (1,2,3,8,9)e o conteúdo (alpha, bravo, charlie, delta, echo)em um loop para obter todo o valor dessa matriz.

Como eu resolvo este problema?

Guillaume
fonte
1
Você tentou pesquisar loops PHP? Use foreachloop.
Josh
3
Não está no PHP, está no Twig no arquivo de modelo!
Guillaume
3
Justo. Você tentou procurar por loops TWIG? twig.sensiolabs.org/doc/tags/for.html
Josh

Respostas:

324

Eu encontrei a resposta:

{% for key,value in array_path %}
    Key : {{ key }}
    Value : {{ value }}
{% endfor %}
Guillaume
fonte
3
Aqui está um link para a documentação oficial: twig.sensiolabs.org/doc/tags/…
Kevin Jantzer 18/11/16
57

Há um exemplo na página SensioLab na fortag:

<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
fonte
1
Este exemplo não iterar sobre as chaves do array, consulte os acima
user2019515
15

Estas são operações estendidas (por exemplo, ordenar, reverter) para matrizes unidimensionais e bidimensionais na estrutura Twig:

Matriz 1D

Sem classificação e reversão de chave

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

Classificação das Chaves

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

Classificação e reversão de chave

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

Matrizes 2D

Sem classificação e reversão de chave

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

Classificação de chave na 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 %}

Classificação de chave nas matrizes 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 %}

Classificação de chave na matriz externa e Classificação de chave e reversão na 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 %}

Classificação de chave e reversão na matriz externa e Classificação de chave na 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 %}

Classificação de chave e reversão na 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
fonte
2

Eu acho que você deseja fazer a "Iteração sobre chaves e valores"

Como o documento aqui diz, basta adicionar "| keys" na variável desejada e isso acontecerá magicamente.

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

Nunca é demais pesquisar antes de perguntar :)

imcoddy
fonte
4
Você não mostrou um exemplo do uso de "| keys" em sua resposta.
Adambean
6
Eu lhe dou 10 porque você tem 308 pontos, mas você responder "Não custa nada para pesquisar antes de pedir" uma porcaria, então eu tirá-lo
Braian Mellor