2013-07-15 3 views
40

Я ищу, чтобы подсчитать количество записей, которые у меня есть в массиве в Twig. Это код, который я пробовал:Подсчет количества элементов в массиве

{%for nc in notcount%} 
{{ nc|length }} 
{%endfor%} 

Это, однако, приводит только к длине строки одного из значений в массиве.

{{nc}} будет выдавать выходные данные всех значений массива (есть 2), но я хочу, чтобы на выходе было всего лишь число 2 (количество), а не вся информация в массиве.

ответ

73

Просто используйте length filter на всем массиве. Он работает на более чем просто строки:

{{ notcount|length }} 
+2

Это было просто отлично. Я чувствую себя глупо. хаха, спасибо большое! – MikeHolford

+2

@MikeHolford Нет проблем. Я рад, что смогу помочь – Paulpro

1

Лучшей практика получения длины является использование length фильтра возвращает количество элементов последовательности или отображений, или длину строки. Например: {{ notcount | length }}

Но вы можете рассчитать количество элементов в цикле for. Например:

{% set count = 0 %} 
{% for nc in notcount %} 
    {% set count = count + 1 %} 
{% endfor %} 

{{ count }} 

Это решение помогает, если вы хотите, чтобы вычислить количество элементов по условию, например, у вас есть свойство name внутри объекта, и вы хотите, чтобы вычислить количество объектов с не пустыми именами:

{% set countNotEmpty = 0 %} 
{% for nc in notcount if nc.name %} 
    {% set countNotEmpty = countNotEmpty + 1 %} 
{% endfor %} 

{{ countNotEmpty }} 

Полезные ссылки:

0

Это расширяет ответ Дениса Бубнов.

Я использовал это, чтобы найти дочерние значения элементов массива, а именно, если в абзацах на сайте Drupal 8 было построено якорное поле для построения оглавления.

{% set count = 0 %} 
{% for anchor in items %} 
    {% if anchor.content['#paragraph'].field_anchor_link.0.value %} 
     {% set count = count + 1 %} 
    {% endif %} 
{% endfor %} 

{% if count > 0 %} 
--- build the toc here -- 
{% endif %} 
Смежные вопросы