【问题标题】:Last iteration on For loop with If condition with twigFor 循环的最后一次迭代,带有 If 条件和树枝
【发布时间】:2019-04-16 16:48:15
【问题描述】:

所以这只是我想要实现的一个例子。 我正在遍历所有项目并只打印那些以 F 开头并用逗号分隔它们的项目。所以最后,循环将进行,例如 15 次迭代,但只会打印 5 次。我试图抓住最后一个将被打印,所以我可以删除逗号。我尝试使用过滤器 loop.last,但它只有在循环打印最后一项时才有效,但如果最后一次打印更早,它仍然是逗号。

{% for item in items %}
  {% if item starts with 'F' %}
     {{ item }},
  {% endif %}
{% endfor %}

我无法编辑项目中的任何内容。 请帮忙,我一直被困在这个问题上。

【问题讨论】:

  • 在循环(而不是输出)时将文本(包括逗号)分配/附加到变量。在循环之后,去掉最后一个字符(结尾的逗号)。然后输出。
  • 过滤循环前的项目。
  • 使用类似内爆的函数
  • 在if语句中使用它不起作用,因为最后一项总是最后一次迭代,并不总是最后一项会被打印,所以它不会定位。

标签: php loops for-loop if-statement twig


【解决方案1】:

我对此进行了测试,所以我想我会提供一个答案:

{% set items = ['Fitem1', 'item2', 'Fitem3', 'Fitem4', 'item5'] %}
{% set newArray = [] %}
{% for item in items %}
  {% if item starts with 'F' %}
    {% set newArray = newArray|merge([item])  %}
  {% endif %}
{% endfor %}
{{ newArray|join(',') }}

【讨论】:

  • 您的解决方案工作正常!看看我的不需要数组定义的回答
【解决方案2】:

一个更简单的解决方案可能是Adding a condition for 语句并仅在不是第一次交互时才显示逗号(loop.last 在使用循环条件时定义)。例如:

{% set items = ['Fitem1', 'item2', 'Fitem3', 'Fitem4', 'item5'] %}

{% for item in items if item starts with 'F'%}

{% if loop.first == false  %},{% endif%}
{{item}}

{% endfor %}

请参阅this twigfiddle 了解工作解决方案

【讨论】:

  • 这也很好,虽然我也有几句话要放在循环之外,所以我使用了数组的解决方案。感谢您的替代方案,将来肯定会帮助我。 :)
  • Dang,在这里我以为你不能在条件中使用loop.first,因为loop.last 在使用条件时不能使用... +1
猜你喜欢
  • 2015-05-04
  • 2011-07-11
  • 2016-05-10
  • 2016-08-25
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多