2013-07-15 10 views
40

Sto cercando di contare il numero di voci che ho in un array in Twig. Questo è il codice ho provato:Conteggio del numero di elementi nell'array

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

Questo però produce solo la lunghezza della stringa di uno dei valori nella matrice.

{{nc}} produrrà un'uscita di tutti i valori dell'array (ce ne sono 2) ma voglio che l'uscita sia solo il numero 2 (il conteggio) e non tutte le informazioni nell'array.

risposta

73

Basta usare lo length filter sull'intero array. Funziona su più di un semplice stringhe:

{{ notcount|length }} 
+2

Questo è stato semplicemente perfetto. Mi sento sciocco. ahah grazie mille! – MikeHolford

+2

@ MikeHolford Nessun problema. Sono contento di poterti aiutare – Paulpro

1

migliori pratiche di ottenere la lunghezza è di utilizzare length filtro restituisce il numero di elementi di una sequenza o di mappatura, o la lunghezza di una stringa. Ad esempio: {{ notcount | length }}

Ma è possibile calcolare il conteggio degli elementi nel ciclo for. Per esempio:

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

{{ count }} 

Questa soluzione aiuta se si desidera calcolare il conto di elementi di condizioni, ad esempio, si dispone di una proprietà name all'interno dell'oggetto e si desidera calcolare conteggio di oggetti con i nomi non vuote:

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

{{ countNotEmpty }} 

link utili:

0

Questo espande sulla risposta di Denis Bubnov.

L'ho usato per trovare i valori secondari degli elementi di matrice, vale a dire se nei paragrafi di un sito Drupal 8 esisteva un campo di ancoraggio per creare un sommario.

{% 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 %} 
Problemi correlati