Метод shuffle
Метод shuffle применяется к коллекции и возвращает новую коллекцию с элементами, расположенными в случайном порядке. Этот метод не изменяет исходную коллекцию, а создаёт новую с перемешанными элементами. Метод полезен, когда необходимо случайным образом упорядочить данные, например, для отображения случайных записей или организации рандомного порядка в игровых приложениях.
Синтаксис
<?php
$collection->shuffle();
?>
Пример
Давайте создадим коллекцию с числами и перемешаем её:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([1, 2, 3, 4, 5]);
$shuffled = $collection->shuffle();
foreach ($shuffled as $item) {
echo $item . " ";
}
?>
Результат выполнения кода:
"3 1 5 2 4"
Как видите, элементы изменили своё положение. При каждом вызове метода порядок будет разным.
Пример
Давайте перемешаем коллекцию с ассоциативным массивом:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([
'first' => 'a',
'second' => 'b',
'third' => 'c',
'fourth' => 'd',
'fifth' => 'e'
]);
$shuffled = $collection->shuffle();
foreach ($shuffled as $key => $value) {
echo $key . " => " . $value . "\n";
}
?>
Результат выполнения кода:
"fourth => d
first => a
third => c
fifth => e
second => b"
Метод сохраняет связь между ключами и значениями, но меняет их порядок.
Пример
Давайте используем метод shuffle на коллекции из модели в реальном проекте:
<?php
use App\Models\Article;
use Illuminate\Support\Collection;
$articles = Article::all();
$shuffledArticles = $articles->shuffle();
foreach ($shuffledArticles as $article) {
echo $article->title . "\n";
}
?>
Результат выполнения кода:
"article 3"
"article 1"
"article 5"
"article 2"
"article 4"
Это полезно для вывода случайных записей, например, для блока похожих статей или для случайного показа товаров.
Пример
Давайте используем метод shuffle вместе с методом take для получения случайного подмножества:
<?php
use Illuminate\Support\Collection;
$collection = new Collection(['a', 'b', 'c', 'd', 'e']);
$randomThree = $collection->shuffle()->take(3);
foreach ($randomThree as $item) {
echo $item . " ";
}
?>
Результат выполнения кода:
"b e c"
Такая комбинация позволяет получить несколько случайных элементов из коллекции.