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