Директива while
Директива while в шаблонизаторе Blade создаёт цикл,
который повторяет блок кода, пока переданное условие
возвращает true. Условие проверяется перед каждой
итерацией. Директива полезна для организации циклов
с неизвестным заранее количеством повторений,
зависящих от динамических данных.
Синтаксис
@while ($condition)
{{-- тело цикла --}}
@endwhile
Условие может содержать переменные, переданные в представление, вызовы методов или любые допустимые PHP-выражения.
Пример
Создадим представление, которое выводит числа от 1 до 5,
используя директиву while. В контроллере передадим
переменную counter, которую будем увеличивать
внутри цикла:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function index()
{
$counter = 1;
return view('index', ['counter' => $counter]);
}
}
?>
@while ($counter <= 5)
<p>The counter is: {{ $counter }}</p>
@php
$counter++;
@endphp
@endwhile
Результат выполнения кода:
<p>The counter is: 1</p>
<p>The counter is: 2</p>
<p>The counter is: 3</p>
<p>The counter is: 4</p>
<p>The counter is: 5</p>
Пример
Используем while для перебора элементов массива
с помощью функции array_shift, которая извлекает
и удаляет первый элемент массива:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function index()
{
$arr = ['a', 'b', 'c', 'd', 'e'];
return view('index', ['arr' => $arr]);
}
}
?>
@while (count($arr) > 0)
<p>Element: {{ array_shift($arr) }}</p>
@endwhile
Результат выполнения кода:
<p>Element: a</p>
<p>Element: b</p>
<p>Element: c</p>
<p>Element: d</p>
<p>Element: e</p>
Пример
Используем while в комбинации с директивой break
для принудительного выхода из цикла при достижении
определённого условия:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function index()
{
$i = 1;
return view('index', ['i' => $i]);
}
}
?>
@while (true)
<p>Iteration: {{ $i }}</p>
@if ($i >= 5)
@break
@endif
@php
$i++;
@endphp
@endwhile
Результат выполнения кода:
<p>Iteration: 1</p>
<p>Iteration: 2</p>
<p>Iteration: 3</p>
<p>Iteration: 4</p>
<p>Iteration: 5</p>