В данном уроке мы с вами разберем директиву @foreach шаблонизатора Blade, представляющую собой цикл для перебора массива, а также другие директивы для циклов.
Рассмотрим работу данной директивы на практическом примере. Пусть из действия в представление передается какой-то массив $arr.
Переберем этот массив циклом и выведем его элементы на экран:
@foreach ($arr as $elem)
{{ $elem }}
@endforeach
Давайте выведем каждый элемент массива в отдельном абзаце:
@foreach ($arr as $elem)
<p>{{ $elem }}</p>
@endforeach
Давайте выведем элементы нашего массива в виде списка ul:
<ul>
@foreach ($arr as $elem)
<li>{{ $elem }}</li>
@endforeach
</ul>
Передайте из действия в представление массив с числами. Выведите этот массив в виде списка ul.
Модифицируйте предыдущую задачу так, чтобы в пункты списка выводились квадраты элементов массива.
Модифицируйте предыдущую задачу так, чтобы в пункты списка выводились квадратные корни элементов массива.
Ключи массива
Можно также получить в отдельную переменную ключи массива, аналогично циклу foreach в PHP:
@foreach ($arr as $key => $elem)
{{ $key }} {{ $elem }}
@endforeach
Часто бывает так, что хотелось бы вывести рядом с элементами массива их порядковые номера, но не очень удобно то, что нумерация в массивах начинается с 0. Для решения проблемы можно просто прибавлять единицу на выводе ключа:
@foreach ($arr as $key => $elem)
{{ $key + 1 }} {{ $elem }}
@endforeach
Передайте из действия в представление массив со строками. Выведите этот массив в виде списка ul так, чтобы выводились и ключи, и значения элементов массива.
Модифицируйте предыдущую задачу так, чтобы на выводе к ключу прибавлялась единица.
Условие в цикле
Директиву @foreach можно комбинировать с директивой @if. Выведем, например, только положительные элементы массива:
<ul>
@foreach ($arr as $elem)
@if ($elem > 0)
<li>{{ $elem }}</li>
@endif
@endforeach
</ul>
А теперь, наоборот, выведем список только в том случае, если количество элементов в массиве больше нуля:
@if (count($arr) > 0)
<ul>
@foreach ($arr as $elem)
<li>{{ $elem }}</li>
@endforeach
</ul>
@endif
Передайте из действия в представление массив с числами. Выведите этот массив в виде списка ul. Сделайте так, чтобы в список попадали только элементы, значениями которых служат четные числа.
Из действия в представление передается переменная $data. Эта переменная может содержать массив с числами либо быть обычным числом. Если переменная $data - массив, то выведите элементы этого массива в виде списка ul, а если переменная $data - число, то выведите это число в абзаце.
Цикл в цикле
Пусть из действия в представление передается вот такой массив:
<?php
$users = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
?>
Давайте выведем элементы этого массива, используя вложенный друг в друга директивы @foreach:
@foreach ($arr as $subArr)
@foreach ($subArr as $elem)
{{ $elem }}
@endforeach
@endforeach
А теперь при выводе в представлении давайте из нашего массива сформируем HTML таблицу:
<table>
@foreach ($arr as $subArr)
<tr>
@foreach ($subArr as $elem)
<td>{{ $elem }}</td>
@endforeach
</tr>
@endforeach
</table>
В результате в браузер отправится вот такой HTML код:
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
</table>
Передайте из действия в представление массив с числами от 1 до 25. Выведите его в виде таблицы 5 на 5.
Многомерный массив
Пусть у нас дан вот такой массив с пользователями:
<?php
$users = [
[
'name' => 'user1',
'age' => 21,
],
[
'name' => 'user2',
'age' => 22,
],
[
'name' => 'user3',
'age' => 23,
],
];
?>
Давайте выведем содержимое этого массива в виде списка ul:
<ul>
@foreach ($users as $user)
<li>{{ $user['name'] }} {{ $user['age'] }}</li>
@endforeach
</ul>
Передайте из действия в представление массив с работниками:
<?php
$employees = [
[
'name' => 'user1',
'surname' => 'surname1',
'salary' => 1000,
],
[
'name' => 'user2',
'surname' => 'surname2',
'salary' => 2000,
],
[
'name' => 'user3',
'surname' => 'surname3',
'salary' => 3000,
],
];
?>
Выведите этот массив в виде списка ul.
Выведите массив из предыдущей задачи в виде таблицы table.
Переменная loop
По следующей ссылке изучите раздел Переменная Loop. Решите затем следующие задачи:
Из действия в представление передается массив со строками. Выведите элементы этого массива в виде списка ul. Сделайте так, чтобы перед значением элемента, выводился еще и порядковый номер итерации, начиная с 0.
Модифицируйте предыдущую задачу так, чтобы порядковый номер итерации начинался с 1.
Модифицируйте предыдущую задачу так, чтобы для первой li добавлялся CSS класс first, а для последней - класс last.
Из действия в представление передается массив с числами. Выведите каждый элемент этого массива в своем теге b. С помощью $loop->remaining три последних элемента массива выведите не в теге b, а в теге i.
Директивы @break и @continue
По следующей ссылке изучите работу с директивами @break и @continue.
Самостоятельно попробуйте работу изученных директив.
Цикл @forelse
В Blade также встроен интересный цикл @forelse, также перебирающий массивы. Работает он следующим образом: если в массиве есть элементы, то цикл их переберет, а если элементов нет, то выведет сообщение из блока @empty:
@forelse($arr as $elem)
<p>{{ $elem }}</p>
@empty
<p>В массиве нет элементов</p>
@endforelse
Самостоятельно попробуйте работу цикла @forelse.
Цикл @for
В Blade также встроен и цикл for:
@for ($i = 0; $i < 10; $i++)
значение счетчика: {{ $i }}
@endfor
С помощью цикла $@for выведите 10 абзацев, заполненных числами от 1 до 10.