Я ищу простой способ создания массива в php, который не позволит дублировать записи, но позволяет легко комбинировать другие наборы или массивы.
Меня больше всего интересует, существует ли такая особенность в языке, потому что писать мои собственные не составит труда. Я просто не хочу, если мне это не нужно.
Просто идея, если вы используете ключи массива вместо значений, вы будете уверены, что дубликатов нет, также это позволяет легко слить два «набора».
$set1 = array ('a' => 1, 'b' => 1, ); $set2 = array ('b' => 1, 'c' => 1, ); $union = $set1 + $set2;
Найдено решение: array_unique
Просто добавьте элементы в массив, а затем вызовите array_unique
чтобы удалить дубликаты, что в конечном итоге достигает такого же эффекта. Единственный недостаток – вы должны помнить, чтобы назвать это. Было бы лучше, если бы был настоящий класс, чтобы справиться с этим, но это хорошо для моих целей.
Вы можете использовать array_combine для удаления дубликатов
$cars = array("Volvo", "BMW", "Toyota"); array_push($cars,"BMW"); $map = array_combine($cars, $cars);
У меня также была эта проблема, поэтому я написал класс: https://github.com/jakewhiteley/php-set-object
Как и было предложено, он расширяет и ArrayObject и допускает встроенную вставку / итерацию / удаление значений, но без использования array_unique()
любом месте.
Реализация основана на MDN JS Docs for Sets в EMCA 6 JavaScript.
В Laravel есть метод, unique
в классе Collection
который может быть полезен. Из документации Laravel:
$collection = collect([1, 1, 2, 2, 3, 4, 2]); $unique = $collection->unique(); $unique->values()->all(); // [1, 2, 3, 4]