在循环中设置变量

时间:2013-08-12 02:04:25

标签: symfony twig symfony-2.3

我正在尝试在树枝上创建一个json对象,所以我需要在循环中设置一个变量。 经过多次尝试后我发现了这种方式,但是当我只有两条记录时,它就没问题了,如果我还有更多的记录产生问题:

{% set data = [] %}
{% for artist in artists %}
     {% if loop.first %}
         {%
         set data = {
               id        : artist.id,
               text      : artist.name|capitalize() ~' '~ artist.surname|capitalize()
             }
         %}
     {% else %}
         {%
          set data = [data,{
              id        : artist.id,
              text      : artist.name|capitalize() ~' '~ artist.surname|capitalize()
            }]
         %}
     {% endif %}
 {% endfor %}
 {% set data = {results: data} %}
 {{ data|json_encode|raw }}

我想要实现的目标是:

{results: [{id: 1, text: "bla"},{id: 2, text: "blabla"},{id: 3, text: "blablabla"}]}

相反,我得到:

{results:[[{id:1,text:"bla"},{id:2,text:"blabla"}],{id:3,text:"blablabla"}]}

有没有办法在树枝内部构建一个json对象而不会发疯?

我已经尝试过这种方式..但是重写对象并在变量中只保存最后一个元素:

{% set data = [] %}
{% for artist in artists %}
     {%
      set data = {
          id        : artist.id,
          text      : artist.name|capitalize() ~' '~ artist.surname|capitalize()
        }
     %}
{% endfor %}
{% set data = {results: data} %}
{{ data|json_encode|raw }}

1 个答案:

答案 0 :(得分:1)

使用merge

{% set data = [] %}
{% for artist in artists %}
     {%
      set data = data|merge ([{
          id        : artist.id,
          text      : artist.name|capitalize() ~' '~ artist.surname|capitalize()
        }])
     %}
{% endfor %}
{% set data = {results: data} %}
{{ data|json_encode|raw }}