Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-细枝更改数组键值_Php_Twig - Fatal编程技术网

PHP-细枝更改数组键值

PHP-细枝更改数组键值,php,twig,Php,Twig,我是Twig新手,正在为以下内容寻找解决方案(这在PHP中非常容易,但是,我们的模板是在Twig中设置的) 我想做什么 编辑细枝中的数组值(使用其索引),以便在循环后输出 发生了什么事 当我尝试按索引编辑数组值时,数组值(使用其索引检索)不会更改。相反,它可以将值附加到数组中 我的代码 预期结果 我希望能够在末尾输出{{age[0]},以显示所有10岁或以下发票的总金额。类似地,我还想输出age[1]和age[2],分别显示10到20天之间和超过20天的所有发票的总金额。在twig中,始终保持一

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

我想做什么 编辑细枝中的数组值(使用其索引),以便在循环后输出

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

我的代码 预期结果
我希望能够在末尾输出
{{age[0]}
,以显示所有10岁或以下发票的总金额。类似地,我还想输出
age[1]
age[2]
,分别显示10到20天之间和超过20天的所有发票的总金额。

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

在您的情况下,只需创建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 }}
{%set amount\u在\u 10下,amount\u在\u 10和\u 20之间,amount\u在\u 20上=0,0,0%}
{发票%中发票的%s}
{%if invoice.age 10和invoice.age 20%}{%set amount_over_20=amount_over_20+1%}{%endif%}{{{invoice.age}
{%endfor%}
{{金额{u 10}}
{{在10和20之间的金额}
{{金额超过20}}

如果您需要更通用(例如任意数量的范围),请不要在Twig中这样做。细枝仅用于呈现信息。

有关其他方法,请参见my

我想我理解将逻辑排除在模板之外的想法,但在我的例子中,我有由管理员编写的SQL查询,这些查询将被执行,通用模板将输出结果。
在模板中计算总计更有意义。

老实说,我想问一下,为什么要在视图中操纵数据?依我看,视图应该是非常愚蠢的,只是简单地呈现它们所提供的数据。数据准备应在控制器和/或服务中进行。我意识到这不一定对你有帮助:(看看这个答案..你显然需要把整型键括在括号里。
{%set amount=amount | merge({(0):'test'})%}
@fubar它实际上是一个非常大的报告的一部分(大约1000页)这将在数据库上执行数百万次计算。PHP将大量数据传递到Twig中,Twig显示信息。我们正试图将数据、应用程序逻辑和视图分开,尽管当您谈论1000页的报告时这有点困难。这是我们在vi中操作数据的唯一原因ew是用于代码的可管理性。我们将很快再次修改它,看看是否可以提供更好的解决方案。我暂时使用了上述方法,因为它似乎提供了目前存在的处理数组的最佳方法(尽管它实际上与数组数据类型无关)不幸的是,这意味着我必须为数组的每一个值创建许多变量,这是麻烦的。但是至少它是工作的。当然,但是你仍然可以在PHP方面开发一些东西,为什么你要在T嫩G中开发你的逻辑呢?还是把Tigg看作是显示事物的东西,而不是更多的东西。ost部分,这就是它的用途,但在本例中,twig用于呈现一个复杂的报告(大约1100页)。我们用SQL收集报告的数据,用PHP适当地组织它(如有必要,即多次选择),然后调用twig模板传递正确的数据以创建报告。twig文件中有一些逻辑的原因是我们允许特定用户编辑报告模板,但是,我们不希望他们访问PHP代码;严格来说,是twig/html/pdf输出
{% 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.
{% 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 }}