我有一个模板,其中包含从一个数组创建的多个列表。
PHP:
$array = [
['type' => 'A', 'name' => 'string 1'],
['type' => 'B', 'name' => 'string 2'],
['type' => 'A', 'name' => 'string 3'],
['type' => 'B', 'name' => 'string 4']
];
HTML:
<h4>A</h4>
<ul>
{% for value in array %}
{% if value.type == 'A' %}
{{ value.name }}
{% endif %}
{% endfor %}
</ul>
<h4>B</h4>
<ul>
{% for value in array %}
{% if value.type == 'B' %}
{{ value.name }}
{% endif %}
{% endfor %}
</ul>
但是,当找不到类型时,我不想显示<h4>
和<ul>
。
我怎么能这样做?
答案 0 :(得分:0)
此处仅在类型存在时打印类型。 Twig for loop condition
{% for item in array if item.type == 'A' %}
{% if loop.first %}<h4>A</h4>{% endif %}
{{ item.name }}
{% endfor %}
正如@RoToRa所建议的那样,它更容易在控制器中完成它并且更有意义,或者可能通过数据库处理的工作。它将取决于设计哪里有更好的数据要分开。还要记住,视图应该显示,将逻辑代码保存在控制器中。
希望这个帮助
答案 1 :(得分:0)
正确的解决方案:&#34;重构&#34;你的数组在控制器中,以便&#34;类型&#34;用作键,如下:
$arrayByType = [
[ 'A' => [
['type' => 'A', 'name' => 'string 1'],
['type' => 'A', 'name' => 'string 3']
],
[ 'B' => [
['type' => 'B', 'name' => 'string 2'],
['type' => 'B', 'name' => 'string 4']
],
];
这可以这样做:
$arrayByType = array();
foreach ($array as $item) {
$arrayByType[$item['type']][] = $item;
}
然后在模板中你只需要:
{% if arrayByType["A"] is not empty %}
<h4>A</h4>
<ul>
{% for value in arrayByType["A"] %}
<li>{{ value.name }}</li>
{% endfor %}
</ul>
{% endif %}
错误解决方案(在模板内):
{% set displayA = false %}
{% for item in array if item.type == 'A' %}
{% set displayA = true %}
{# There is no "break" in twig, so that makes this extremely suboptimal #}
{% endfor %}
{% if displayA %}
<h4>A</h4>
<ul>
{% for item in array if item.type == 'A' %}
<li>{{ value.name }}</li>
{% endfor %}
</ul>
{% endif %}
答案 2 :(得分:-1)
您可以使用以下内容:
{% for value in array %}
{% if value.type !='' %}
<h4>{{ value.type }}</h4>
<ul>
{{ value.name }}
</ul>
{% endif %}
{% endfor %}