PHP - Twig更改数组键值

时间:2017-03-27 22:41:40

标签: php twig

我是Twig的新手并寻找以下解决方案(在PHP中非常容易,但是,我们的模板在Twig中设置)

我想做什么

在Twig中编辑一个数组值(使用其索引),以便在循环后输出。

发生了什么

当我尝试按索引编辑数组值时,数组值(使用其索引检索)不会更改。相反,它可以将值附加到数组

我的代码

...
{% set amount = [0,0,0] %}
{% for invoice in invoices %}
<tr>
    <td>{% if invoice.age <= 10 %}{% set amount ?????? %}{% endif %}</td>
    <td>{% if invoice.age > 10 and invoice.age <= 20 %}{% set amount ?????? %}{% endif %}</td>
    <td>{% if invoice.age > 20 %}{% set amount ?????? %}{% endif %}</td>
</tr>
{% endfor %}
...
{{ amount[0] }}

我尝试了什么

我已尝试以下操作将age[0]的值更改为无效。

{% set amount = amount|merge({0: 'test'}) %}

{% set amount = amount|merge({0: 'test'})|keys %}

{% set amount = amount|merge({(0), 'test'}) %}

{% set amount = amount|merge({(0), 'test'})|keys %}

... and many more.

预期结果

我希望能够在结尾输出{{ age[0] }},以显示10岁或以下所有发票的总金额。同样,我还要输出age[1]age[2]来显示所有年龄介于10到20天之间和超过20天的发票的总金额。

2 个答案:

答案 0 :(得分:2)

在树枝中,始终保持一切简单,没有硬逻辑。

在您的情况下,只需创建3个变量。

{% set amount_under_10, amount_between_10_and_20, amount_over_20 = 0,0,0 %}

{% for invoice in invoices %}
<tr>
    <td>{% if invoice.age <= 10 %}{% set amount_under_10 = amount_under_10 + 1 %}{% endif %}{{ invoice.age }}</td>
    <td>{% if invoice.age > 10 and invoice.age <= 20 %}{% set amount_between_10_and_20 = amount_between_10_and_20 + 1 %}{% endif %}{{ invoice.age }}</td>
    <td>{% if invoice.age > 20 %}{% set amount_over_20 = amount_over_20 + 1 %}{% endif %}{{ invoice.age }}</td>
</tr>
{% endfor %}

{{ amount_under_10 }}
{{ amount_between_10_and_20 }}
{{ amount_over_20 }}

请参阅fiddle

如果您需要更通用(例如,任意数量的范围),请不要在Twig中执行此操作。 Twig是为渲染信息而制作的,不再是。

答案 1 :(得分:0)

请参阅我的answer here了解其他方法。

我认为我理解将逻辑排除在模板之外的想法,但在我的情况下,我有执行的管理员编写的SQL查询,并且通用模板输出结果。 计算模板中的总计更有意义。