Answers:
在Twig中没有很好的方法可以做到这一点。但是,可以使用合并过滤器:
{% set arr = arr|merge({'element': 'value'}) %}
.
和[]
Twig非常相似,我错了。我查了一下并编辑了答案。
'element'
。我在下面找到了@LivaX的答案。因此,它将是{% set arr = arr|merge({(key): 'value'}) %}
。
{{ UI.button({'type':'submit'}) }}
并且所有这些宏都使用| merge来设置默认参数,因此对此存在逻辑上的需要……
我遇到了这个问题,但是试图创建整数索引而不是像“元素”这样的关联索引。
您还需要()
使用合并过滤器来保护索引键:
{% set arr = arr|merge({ (loop.index0): 'value'}) %}
您现在可以添加自定义索引键,例如 ('element'~loop.index0)
如果只需要初始化:
{% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %}
我已经尝试了@LivaX的答案,但它不起作用,合并键为数字的数组将不起作用(https://github.com/twigphp/Twig/issues/789)。
仅当键为字符串时才有效
我所做的是temp
从初始表(t
)重新创建另一个表(),并使键成为字符串,例如:
{% for key , value in t%}
{% set temp= temp|merge({(key~'_'):value}) %}
{% endfor %}
t
键:0,1,2 ..
temp
键:0_,1_,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。
我发现这个问题很烦人,我的解决方案也许是正统的,不符合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')%}
就像这样使用{% 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
我前一段时间有这个问题。假设您有一个像这样的数组:
data = {
'user': 'admin',
'password': 'admin1234',
'role': 'admin',
'group': 'root',
'profile': 'admin',
'control': 'all',
'level': 1,
'session': '#DFSFASADASD02',
'pre_oa': 'PRE-OA',
'hepa_oa': 'HEPA-OA',
'pre_ra': 'HEPA-RA',
'hepa_ra': 'HEPA-RA',
'deodor_ra': 'DEODOR-RA'
}
因此,您想在两行中显示此数据,但从该列表中删除密码。为此,使用slice
过滤器很容易将其分成2个阵列。但是,我们必须删除密码。因此,我正在使用此代码段。我们的想法是将所有元素小于data
元素大小除以2。要使用滤波器计算此元素length
。现在,获取用户当前元素的索引loop.index
。最后,我们将一个关联元素*推入左或右数组。关联数组具有key
和的两个分量value
。要在twit中引用数组键,我们需要操作符,()
然后使用merge
过滤器将数组推入数组,如下所示{% set left_list = left_list|merge({ (key): value }) %}
这是完整的解决方案。
{% set left_list = {} %}
{% set right_list = {} %}
{% set limit = data|length // 2 %}
{% for key, value in data|cast_to_array %}
{% if key != 'password' %}
{% if loop.index <= limit %}
{% set left_list = left_list|merge({ (key): value }) %}
{% else %}
{% set right_list = right_list|merge({ (key): value }) %}
{% endif %}
{% endif %}
{% endfor %}
{% for key, value in left_list %}
<p>
<label for="{{key}}">{{key}}</label>
<input type="text" name="{{key}}" id="{{key}}" value="{{value}}"
class="text ui-widget-content ui-corner-all">
</p>
{% endfor %}