``for`` ======= Loop over each item in a sequence. For example, to display a list of users provided in a variable called ``users``: .. code-block:: html+twig

Members

.. note:: A sequence can be either an array or an object implementing the ``Traversable`` interface. If you do need to iterate over a sequence of numbers, you can use the ``..`` operator: .. code-block:: twig {% for i in 0..10 %} * {{ i }} {% endfor %} The above snippet of code would print all numbers from 0 to 10. It can be also useful with letters: .. code-block:: twig {% for letter in 'a'..'z' %} * {{ letter }} {% endfor %} The ``..`` operator can take any expression at both sides: .. code-block:: twig {% for letter in 'a'|upper..'z'|upper %} * {{ letter }} {% endfor %} .. tip: If you need a step different from 1, you can use the ``range`` function instead. The `loop` variable ------------------- Inside of a ``for`` loop block you can access some special variables: ===================== ============================================================= Variable Description ===================== ============================================================= ``loop.index`` The current iteration of the loop. (1 indexed) ``loop.index0`` The current iteration of the loop. (0 indexed) ``loop.revindex`` The number of iterations from the end of the loop (1 indexed) ``loop.revindex0`` The number of iterations from the end of the loop (0 indexed) ``loop.first`` True if first iteration ``loop.last`` True if last iteration ``loop.length`` The number of items in the sequence ``loop.parent`` The parent context ===================== ============================================================= .. code-block:: twig {% for user in users %} {{ loop.index }} - {{ user.username }} {% endfor %} .. note:: The ``loop.length``, ``loop.revindex``, ``loop.revindex0``, and ``loop.last`` variables are only available for PHP arrays, or objects that implement the ``Countable`` interface. The `else` Clause ----------------- If no iteration took place because the sequence was empty, you can render a replacement block by using ``else``: .. code-block:: html+twig Iterating over Keys ------------------- By default, a loop iterates over the values of the sequence. You can iterate on keys by using the ``keys`` filter: .. code-block:: html+twig

Members

Iterating over Keys and Values ------------------------------ You can also access both keys and values: .. code-block:: html+twig

Members

Iterating over a Subset ----------------------- You might want to iterate over a subset of values. This can be achieved using the :doc:`slice <../filters/slice>` filter: .. code-block:: html+twig

Top Ten Members