Group looped entries into blocks and wrap in markup every x number of loops I am trying to loop through all the entries in a section and "group" them into items which are in blocks of 9 then wrap them with some html markup so there will be the following code:

{% set selectedWork = craft.entries.section('selectedWork') %}

&lt;div class="panel panel--1"&gt;
  &lt;article class="img-grid"&gt;

    {% for item in selectedWork %}
    &lt;section class="img-grid__item"&gt;
      {{ item.title }}
    &lt;/section&gt;
    {% endfor %}

  &lt;/article&gt;
&lt;/div&gt;&lt;!-- END .panel --&gt;


The outer &lt;div class="panel panel-1"&gt; and &lt;article&gt; tags need to wrap round the first 9 items then then next 9 etc. etc. Also the panel--1 needs to increment so that each panel goes in order so panel--1 holds 1-9 items then panel--2 holds 9-18 items etc. Is this possible using some kind of array splice or something?
The array slice something you are looking for is Twig's batch filter. Here's how you'd set up the groups and use loop.index to generate the class name.

{# Use the `find()` method to return an array of EntryModels #}
{% set selectedWork = craft.entries.section('selectedWork').find() %}

{# Group entries using the `batch` filter #}
{% set selectedWorkGrouped = selectedWork|batch(9) %}

{% for group in selectedWorkGrouped %}

    {# Set class using the loop index from outer loop #}
    {% set panelClass = 'panel--' ~ loop.index %}

    &lt;div class="panel {{ panelClass }}"&gt;

        {% for entry in group %}
            &lt;section class="img-grid__item"&gt;
                {{ entry.title }}
            &lt;/section&gt;
        {% endfor %}

    &lt;/div

{% endfor %}