11

我正在尝试将键值对添加到数组中,并为所有不以“_”开头的属性添加当前值。出于某种原因,合并将“key”(即 slug)的值替换为字符串“key”。

例如,当 slug 是唯一一个键不以“_”开头的属性时,

key = slug
value = something

它的行为如下:

{% for key,value in app.request.attributes.all %}
    {% if '_' != key | slice(0, 1) %}
        {{ dump(key) }}  // string(4) "slug"
        {% set params = params | merge({ key : value}) %}
        {{ dump(key) }} // string(4) "slug"
    {% endif %}
{% endfor %}
{{ dump(params) }} // array(1) { ["key"]=> string(9) "something" }

我已经添加了转储返回的内容。

最终转储返回

array(1) { ["key"]=> string(9) "something" }

在我期待的时候

array(1) { ["slug"]=> string(9) "something" }

我想说这是一个与Twig forgets array-keys类似的问题,但关于这个问题的结论是这是一个 mongodb 问题,我没有使用它。我正在处理请求中的属性。

由于某种原因,merge({ key : value}) 的行为类似于 merge({ 'key' : value})。

4

2 回答 2

30

您需要用括号将变量包装起来才能将其用作键。

{% set params = params | merge({ (key) : value}) %}
于 2013-03-16T21:32:53.523 回答
2

使用数字键,您可能会在此过程中丢失您的密钥,使用 m̀erge`过滤器。

我找不到有关应用于数组的“+”运算符的任何文档,但在这种情况下效果很好:

{% set array = {(1): 2} + array %}

来源:https ://github.com/twigphp/Twig/issues/2741#issuecomment-417445042

于 2020-07-03T10:37:39.410 回答