2011-12-26 9 views
27

Hola Me gustaría hacer algo como lo siguiente:Un recuento en un bucle

<?php $count = 0; foreach($a as $v): $count++; ?> 
    <?php if ($count%2 == 0): ?> 
    ... 
    <?php endif; ?> 
<?php endforeach; ?> 

en rama:

{% for v in a %} 
    {% if ??? is even %} 
    ... 
    {% endif %} 
{% endfor %} 

pero ¿cómo puedo tener una variable que evoluciona con el lazo?

Respuesta

56

Al parecer ramita define algunos loop variables dentro del ciclo for:

{% for v in a %} 
    {% if loop.index0 is even %} 
     ... 
    {% endif %} 
{% endfor %} 
24

Si lo usa para peinar que puede hacer:

{% for v in a %} 
    <div class="link {{ cycle(['even', 'odd'], loop.index0) }}"> 
    </div> 
{% endfor %} 
+1

Gracias, exactamente lo que estaba buscando. Sin embargo, solo una pequeña corrección: debería ser 'cycle (['even', 'odd'], loop.index0)' porque 'loop.index0' se usa. Cuando usas 'loop.index0' estás diciendo que tienes una fila" zeroth ", y cero es un número par. Por lo tanto, con esta corrección, la fila zeroth es pareja, la primera fila es impar, la segunda fila es par, etc. – cmt

+0

Solución muy buena, especialmente si necesita algo diferente a "par e impar", pero por ejemplo "1º, 2º y 3º ". Ahora, ¿qué hay del rendimiento? ¿Es posible que usar '{% if loop.index0 sea par%}' sea más rápido que completar una lista de cadenas con '{{cycle (['even', 'odd'], loop.index0)}}'? Sería interesante saber si podría haber alguna razón para preferir una solución sobre la otra o si simplemente no importa al final. – Arvid