Тег {foreach}
=============
Тег `foreach` предоставляет простой способ перебора массивов.
`Foreach` работает только с массивами, объектами и интервалами.
```smarty
{foreach $list [as [$key =>] $value] [index=$index] [first=$first] [last=$last]}
{* ...code... *}
{break}
{* ...code... *}
{continue}
{* ...code... *}
{foreachelse}
{* ...code... *}
{/foreach}
```
### {foreach}
Перебор значений массива $list:
```smarty
{foreach $list as $value}
{$value}
{/foreach}
{foreach 1..7 as $value} {* так же хорошо работает и с интервалами *}
№{$value}
{/foreach}
```
Перебор ключей и значений массива $list:
```smarty
{foreach $list as $key => $value}
{$key}: {$value}
{/foreach}
```
Получение номера (индекса) итерации, начиная с 0
```smarty
{foreach $list as $value}
№{$value@index}: {$value}
{/foreach}
или
{foreach $list as $value index=$index}
№{$index}: {$value}
{/foreach}
```
Определение первой итерации:
```smarty
{foreach $list as $value}
{if $value@first} first item {/if} {$value}
{/foreach}
или
{foreach $list as $value first=$first}
{if $first} first item {/if} {$value}
{/foreach}
```
Переменная `$value@first` будет иметь значение **TRUE**, если текущая итерация является первой.
Определение последней интерации:
```smarty
{foreach $list as $value}
{if $value@last} last item {/if} {$value}
{/foreach}
или
{foreach $list as $value last=$last}
{if $last} last item {/if} {$value}
{/foreach}
```
Переменная `$value:last` будет иметь значение **TRUE**, если текущая итерация является последней.
**Замечание:**
Использование `last` требует от `$list` быть **countable**.
### {break}
Тег `{break}` используется для выхода из цикла до достижения последней итерации.
Если в цикле встречается тег `{break}`, цикл завершает свою работу, и далее, выполняется код, следующий сразу за блоком цикла
### {continue}
Тег `{continue}` используется для прерывания текущей итерации.
Если в цикле встречается тег `{continue}`, часть цикла, следующая после тега, не выполняется, и начинается следующая итерация.
Если текущая итерация была последней, цикл завершается.
### {foreachelse}
Тег {foreachelse} ограничивает код, который должен быть выполнен, если итерируемый объект пуст.
```smarty
{var $list = []}
{foreach $list as $value}
{if $last} last item {/if} {$value}
{foreachelse}
empty
{/foreach}
```
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Fenom\CompileException` при компиляции