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` позволяет легко выявлять повторяющиеся значения в коллекциях, обеспечивая целостность и валидность данных.