Метод each
Метод each применяется к коллекции и позволяет выполнить заданную callback-функцию для каждого элемента. Первым параметром передаётся функция обратного вызова, которая получает текущий элемент и, опционально, его ключ или индекс. Если callback возвращает false, итерация прерывается. Метод возвращает исходную коллекцию, что позволяет строить цепочки вызовов.
Синтаксис
<?php
$collection->each(callable $callback);
?>
Пример
Давайте переберём коллекцию чисел и выведем каждое из них на экран:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([1, 2, 3, 4, 5]);
$collection->each(function ($item) {
echo $item;
});
?>
Результат выполнения кода:
"12345"
Пример
Давайте выведем элементы коллекции с их ключами:
<?php
use Illuminate\Support\Collection;
$collection = new Collection(['a' => 1, 'b' => 2, 'c' => 3]);
$collection->each(function ($value, $key) {
echo "$key: $value";
});
?>
Результат выполнения кода:
"a: 1b: 2c: 3"
Пример
Давайте прервём итерацию, когда встретится элемент 3:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([1, 2, 3, 4, 5]);
$collection->each(function ($item) {
if ($item === 3) {
return false;
}
echo $item;
});
?>
Результат выполнения кода:
"12"
Пример
Давайте используем метод each в цепочке с другими методами коллекции:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([1, 2, 3, 4, 5]);
$res = $collection->filter(function ($item) {
return $item % 2 === 0;
})->each(function ($item) {
echo $item * 2;
});
?>
Результат выполнения кода:
"48"
Пример
Давайте используем метод each для изменения элементов коллекции по ссылке:
<?php
use Illuminate\Support\Collection;
$collection = new Collection(['a', 'b', 'c', 'd', 'e']);
$collection->each(function (&$item) {
$item = strtoupper($item);
});
$res = $collection->all();
?>
Результат выполнения кода:
["A", "B", "C", "D", "E"]
Пример
Давайте используем метод each для работы с коллекцией моделей:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::where('status', 'published')->get();
$articles->each(function ($article) {
echo $article->title;
});
}
}
?>
Результат выполнения кода:
"article 1article 2article 3"