我正在尝试为订单系统创建一个包含日期的数组。这些日期与商店无法交付的日期相对应。
我无法创建该数组,因为值是字符串,并且使用 merge
过滤器会不断产生错误。
我只能访问商店的前端,因此无法创建自定义功能。
最终结果需要是一个包含所有日期的数组,以便我可以将其用作 javascript 数组,如下所示:
var closed = [
{{ closedDates }} // ["01-01-2018", "02-01-2018", etc...]
];
所以我拥有的是这样的:
1) 网上商店会填写他们关闭的单日以及可能的天数范围。 那是三个变量,例如:
{{ closedDays }} {# produces eg 01-01-2018, 02-01-2018, 03-01-2018 { it's dd-mm-yy #}
{{ date_range_start }} {# produces eg. 10-01-2018 #}
{{ date_range_end }} {# produces eg. 20-01-2018 #}
2) 所以我做的是这样的:
{% set closedDates = [] %}
{% if theme.closedDays %}
{% set foo = theme.closedDays %}
{% for i in foo | slice(0, 5) %}
{% set closedDates = closedDates | merge(i) %}
{% endfor %}
{% endif %}
{% if theme.date_range_start and theme.date_range_end %}
{% set start_date = theme.date_range_start %}
{% set end_date = theme.date_range_end %}
{# below function lists all days between start and end date #}
{% for weekRange in range(start_date|date('U'), end_date|date('U'), 86400 ) %}
{% set closedDates = closedDates | merge(weekRange | date('d-m-Y')) %}
{% endfor %}
{% endif %}
当我像上面那样做时,我收到一条错误消息,提示 合并过滤器仅适用于数组或哈希;
。但是你如何用这些值创建一个数组呢?这只能通过 merge
完成,对吧?!
非常感谢任何帮助。
最佳答案
在 Twig 中,您不能只将元素推送到数组中。相反,您必须将数组与另一个数组合并。
给定一个数组:
{% set firstArray = ['a', 'b'] %}
如果你想添加元素'c',你必须合并它提供一个数组,即使你想添加单个字符串元素。
{% set firstArray = firstArray | merge(['c']) %}
如果你使用关联数组,它是类比的:
{% set secondArray = {'a': 'string a', 'b': 'string b' } %}
{% set secondArray = secondArray | merge({'b': 'overwritten!', 'c': 'string c' }) %}
唯一的区别是元素 b
将被 secondArray
中的值覆盖,所以你会得到:
{
'a': 'string a',
'b': 'overwritten!',
'c': 'string c'
}
关于arrays - Twig 在一个数组中合并多个事物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598659/