Twig合并了一个数组中的多个东西

时间:2017-12-01 17:37:16

标签: arrays symfony twig

我正在尝试为订单系统创建一个包含日期的数组。这些日期对应于商店无法提供的日期。

我无法创建该数组,因为值是字符串,并且使用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 %}

如上所述,我收到错误The merge filter only works with arrays or hashes;。但是如何使用这些值创建数组呢?这只能用merge完成吗?!

任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

在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'
}