如何在Twig中设置已存在数组的成员?
我尝试过以下方式:
{% set arr['element'] = 'value' %}
但是我遇到了以下错误:
在......中,出现了意外的标记"value ["的标点符号"(期望的语句块结束)。
在Twig中没有很好的方法做到这一点。但是,可以使用合并过滤器来实现:
{% set arr = arr|merge({'element': 'value'}) %}
如果element
是一个变量,请用方括号将其包围:{% set arr = arr|merge({(element): 'value'}) %}
我遇到了这个问题,但是试图创建整数索引而不是像 'element' 这样的关联索引。
您还需要使用合并过滤器来保护索引键,用()
:
我遇到了这个问题,但是试图创建整数索引而不是像 'element' 这样的关联索引。
您需要在使用合并过滤器时,也要用()
来保护您的索引键:
{% set arr = arr|merge({ (loop.index0): 'value'}) %}
现在您可以添加自定义索引键,例如 ('element'~loop.index0)
{% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %}
{% for key , value in t%}
{% set temp= temp|merge({(key~'_'):value}) %}
{% endfor %}
t
键:0、1、2等。
temp
键:0_、1_、2_等。
您也可以使用以下语法:
{% set myArray = myArray + myArray2 %}
我觉得这个问题非常烦人,我的解决方案可能有些传统,不太符合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);
如果有人需要在merge
无法工作时更新数组,因为它只会将内容添加到数组的末尾而不提供更改现有值的能力,可以参考以下方法。
假设您有一个名为words_array
的数组,如下所示:
Object {
0: "First word"
1: "Second word"
2: "Third word"
}
"第二个单词"
,你可以按照以下步骤进行:{% set words_array = {(1): 'New word'} + words_array %}
Object {
0: "First word"
1: "New word"
2: "Third word"
}
如果您正在使用循环,可以进一步使用loop.index0
变量来实现以下操作:
{% for word in words_array %}
{% if word == 'Second word' %}
{% set words_array = {(loop.index0): 'New word'} + words_array %}
{% endif %}
{% endfor %}
只需像这样使用{% 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 does not work, saying 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'%}
谢谢这个帖子——我也能够使用(loop.index0)创建一个数组并发送到twig。
我有一个多维数组。我能找到的唯一解决方案是创建一个新的临时数组并更新/添加信息,然后将其传递给另一个twig函数。
{% set arr = arr|merge({(key): 'value'}) %}
。 - Sithu{{ UI.button({'type':'submit'}) }}
,并且所有这些宏都使用| merge设置默认参数,因此有一个逻辑上的需要... - Prof