【发布时间】:2021-04-07 13:35:25
【问题描述】:
我的目标是有一个类似“名称:冰沙,成分:牛奶,橙子,类别:素食主义者”的字符串(可以有很多选项:值或选项:值,值,值...对)来生成数组如下
[
{
option: 'name',
value: ['smoothie']
},
{
option: 'ingredients',
value: ['milk', 'orange']
},
{
option: 'category',
value: ['vegan']
}
]
我认为像下面这样的东西会起作用,但它会产生以下错误,我不明白为什么。 问题出在我尝试向现有 options[last_ok_index].value 数组添加值的那一行
{% set options[last_ok_index].value = options[last_ok_index].value|merge( [ x[0] ] ) %}
值“[”的意外标记“标点符号”(应为“语句块结束”)。
{% set product = "name: smoothie, ingredients: milk, orange" %}
{% set options = [] %}
{% set last_ok_index = 0 %}
{% for item in product|split(',') %}
{% set x = item|split(': ') %}
{% if x|length == 2 %}
{% set options = options|merge( [ { option: x[0], value: [x[1]] } ] ) %}
{% set last_ok_index = loop.index - 1 %}
{% else %}
{% set options[last_ok_index].value = options[last_ok_index].value|merge( [ x[0] ] ) %}
{% endif%}
{% endfor %}
{# print result #}
{% for item in options %}
{{item.option }}
{% for inner_item in item.value %}
{{"-" ~ inner_item}}
{% endfor %}
{% endfor %}
【问题讨论】:
-
你为什么在模板而不是控制器或直接 PHP 中这样做?
-
我不应该接触任何控制器代码......我相信在树枝中以某种方式是可能的
-
您尝试过什么调试问题?为什么不逐步减少代码来发现问题呢?
-
问题出在行 {% set options[last_ok_index].value = options[last_ok_index].value|merge( [ x[0] ] ) %} 所以当我尝试添加一个现有 options[last_ok_index].value 数组中的值
-
您是否考虑过编写一个 TwigExtension 来处理解析字符串并返回数组?这样您就可以使用 PHP 而无需修改任何现有代码,例如在控制器中。您可以将此作为模板:stackoverflow.com/a/14504988/1166880