Laravel
February 20
Поиск дубликатов в коллекциях Laravel
Нужно найти дубликаты в коллекции? Метод `duplicates
` в Laravel предоставляет простой способ найти повторяющиеся значения, будь то простые типы или вложенные атрибуты.
Базовое использование
Поиск дубликатов с помощью обычной и строгой проверки:
// Обычная проверка дубликатов $collection = collect(['a', 'b', 'A', 'a', 'B', 'b']); $duplicates = $collection->duplicates(); // Result: [3 => 'a', 5 => 'b'] // Без учета регистра // Строгая проверка дубликатов $strictDuplicates = $collection->duplicatesStrict(); // Result: [3 => 'a', 5 => 'b'] // С учетом регистра
Работа с массивами и объектами
Проверка на наличие дубликатов в определенных атрибутах:
$employees = collect([ ['email' => 'abigail@example.com', 'position' => 'Developer'], ['email' => 'james@example.com', 'position' => 'Designer'], ['email' => 'victoria@example.com', 'position' => 'Developer'] ]); $duplicatePositions = $employees->duplicates('position'); // Result: [2 => 'Developer']
Реальный пример
Рассмотрим, как это можно использовать в сервисе валидации данных:
class DataValidator { public function validateUniqueEmails(Collection $users) { // Обычная проверка дубликатов электронных писем $duplicates = $users->duplicates('email'); if ($duplicates->isNotEmpty()) { throw new ValidationException( "Duplicate emails found: " . $duplicates->implode(', ') ); } } public function findDuplicateTags(Collection $tags) { return [ 'case_insensitive' => $tags->duplicates(), 'case_sensitive' => $tags->duplicatesStrict() ]; } public function checkUniqueTags(Collection $posts) { $tags = collect([ 'php', 'PHP', 'php', 'laravel', 'Laravel', 'LARAVEL' ]); return [ 'basic_duplicates' => $tags->duplicates(), // Result: [2 => 'php', 4 => 'Laravel'] 'case_sensitive_duplicates' => $tags->duplicatesStrict(), // Result: [2 => 'php'] ]; } }
Метод `duplicates
` позволяет легко выявлять повторяющиеся значения в коллекциях, обеспечивая целостность и валидность данных.