设置Twig数组的元素

我怎样才能从Twig中设置一个已经存在的数组的成员?

我尝试着下一步:

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

但我得到了以下错误:

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

Twig中没有很好的方法来做到这一点。 但是,可以使用合并filter:

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

我遇到了这个问题,但试图创build整数索引,而不是联想索引像“元素”。

你需要使用合并filter来保护你的索引键()

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

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

如果初始化只需要:

 {% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %} 

就像{% set arr={'key':'value'} %} (在':'之后没有空格)“一样。 但是当我用'for'来创build一个数组时,它不能在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 

感谢您的关注。 (英语不好,对不起!)

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

感谢这个线程 – 我也能够创build(loop.index0)数组并发送到树枝。

我有一个multidimensional array。 我能find的唯一的解决scheme是创build一个新的临时数组,并更新/添加信息,这进一步传递到另一个小枝函数。

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

这只有当键是string时才有效

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

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

t键:0,1,2 ..

temp密钥:0_,1_,2_ ….

我发现这个问题非常烦人,我的解决scheme可能是正统的,不与小枝哲学内联,但我开发了以下内容:

 $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')%}