it-roy-ru.com

Встроенная поддержка множеств в PHP?

Я ищу простой способ создания массива в php, который не позволяет дублировать записи, но позволяет легко комбинировать другие наборы или массивы.

Меня больше всего интересует, существует ли такая функция в языке, потому что написать свою собственную не составит труда. Я просто не хочу, если мне не нужно.

39
devios1

Просто идея, если вы используете ключи массива вместо значений, вы будете уверены, что нет дубликатов, также это позволяет легко объединить два «набора».

$set1 = array ('a' => 1, 'b' => 1, );
$set2 = array ('b' => 1, 'c' => 1, );
$union = $set1 + $set2;
62
zrvan

Нашел решение: array_unique

Просто добавьте элементы в массив, затем вызовите array_unique , чтобы удалить дубликаты, что в конечном итоге дает тот же эффект. Единственным недостатком является то, что вы должны помнить, чтобы назвать это. Было бы лучше, если бы существовал реальный класс для управления этим, но это хорошо для моих целей.

29
devios1

Вы можете использовать array_combine для удаления дубликатов

$cars = array("Volvo", "BMW", "Toyota");
array_Push($cars,"BMW");

$map = array_combine($cars, $cars);
0
Preetam Purbia

В Laravel есть метод unique в классе Collection, который может быть полезен. Из Laravel документация :

$collection = collect([1, 1, 2, 2, 3, 4, 2]);
$unique = $collection->unique();
$unique->values()->all();
// [1, 2, 3, 4]
0
mp31415

У меня также была эта проблема, и поэтому я написал класс: https://github.com/jakewhiteley/php-set-object

Как и предполагалось, он расширяет и ArrayObject и допускает вставку/итерацию/удаление значений с собственным чувством, но без использования array_unique() в любом месте.

Реализация основана на MDN JS Docs для наборов в EMCA 6 JavaScript.

0
Jake Whiteley