首页 文章

从Twig设置数组元素

提问于
浏览
116

如何从Twig中设置已存在的数组的成员?

我尝试下一步:

{% set arr['element'] = 'value' %}

但我收到以下错误:

意外的标记“标点符号”值为“[”(“预期结束语句块”)...

8 回答

  • 1

    我遇到了这个问题但是试图创建整数索引而不是像'element'这样的关联索引 .

    您还需要使用合并筛选器使用 () 保护索引键:

    {% set arr = arr|merge({ (loop.index0): 'value'}) %}
    

    您现在可以添加自定义索引键,如 ('element'~loop.index0)

  • 70

    只需使用 {% set arr={'key':'value'} %} (':'后没有空格)就可以了,效果很好 . 但是当我使用'for'制作一个数组时,它无法在for区域外工作 .

    {% for group in user.groups %}
                {% set foo={'loop.index0':'group.id'} %}
                {% set title={'loop.index0':'group.title'} %}
                {{ title }} //it work 
              {% else %}
                {% set foo={'0':'-1'} %}
                {% set title={'0':'未分组'} %}
              {% endfor %}
                {{ title }}  //it not work, say title is not defined
    

    谢谢你的关注 . (英语不好,对不起!)

  • 0

    如果初始化只需要:

    {% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %}
    
  • 2
    {% set links = {} %}
    
    {# Use our array to wrap up our links. #}
    {% for item in items %}
      {% set links = links|merge({ (loop.index0) : {'url': item.content['#url'].getUri(), 'text': item.content['#title']} }) %}
    {% endfor %}
    
    {%
    set linkList = {
      'title': label,
      'links': links
    }
    %}
    
    {% include '<to twig file>/link-list.twig'%}
    

    感谢这个帖子 - 我也能用(loop.index0)创建一个数组并发送给twig .

  • 2

    在Twig中没有很好的办法 . 但是,可以使用合并过滤器:

    {% set arr = arr|merge({'element': 'value'}) %}
    
  • 188

    我已经尝试了@LivaX的答案,但它不起作用,合并一个数字键,数字不会工作(https://github.com/twigphp/Twig/issues/789) .

    这只有在键是字符串时才有效

    我所做的是从初始表( t )重新创建另一个表( temp )并将键设为字符串,例如:

    {% for key , value in t%}
    {% set temp= temp|merge({(key~'_'):value}) %}
    {% endfor %}
    

    t 键:0,1,2 ..

    temp 键:0_,1_,2_ ....

  • 1

    我有一个多维数组 . 我能找到的唯一解决方案是创建一个新的临时数组和 update/add 信息,这些信息进一步传递给另一个twig函数 .

  • 15

    我发现这个问题非常烦人,我的解决方案可能是正统的,不符合Twig哲学,但我开发了以下内容:

    $function = new Twig_Function('set_element', function ($data, $key, $value) {
        // Assign value to $data[$key]
        if (!is_array($data)) {
            return $data;
        }
        $data[$key] = $value;
        return $data;
    });
    $twig->addFunction($function);
    

    可以使用如下:

    {%set arr = set_element(arr,'element','value')%}

相关问题