Встроенная поддержка наборов в PHP?
Я ищу простой способ создания массива в php, который не допускает дублирования записей, но позволяет легко комбинировать другие наборы или массивы.
Меня больше всего интересует, существует ли такая функция в языке, потому что написать свою собственную было бы несложно. Я просто не хочу, если мне это не нужно.
5 answers
Просто идея, если вы используете ключи массива вместо значений, вы будете уверены, что дубликатов нет, также это позволяет легко объединить два "набора".
$set1 = array ('a' => 1, 'b' => 1, );
$set2 = array ('b' => 1, 'c' => 1, );
$union = $set1 + $set2;
Найдено решение: array_unique
Просто добавьте элементы в массив, а затем вызовите array_unique
для удаления дубликатов, что в конечном итоге приводит к тому же эффекту. Единственный недостаток в том, что вы должны помнить, как это назвать. Было бы лучше, если бы для этого существовал настоящий класс, но для моих целей это нормально.
У меня тоже была эта проблема, и поэтому я написал класс: https://github.com/jakewhiteley/php-set-object
Как и предлагалось, он расширяет и ArrayObject и позволяет вставлять/повторять/удалять значения в собственном стиле, но без использования array_unique()
в любом месте.
Реализация основана на документах MDN JS для наборов в JavaScript EMCA 6.
Вы можете использовать array_combine для удаления дубликатов
$cars = array("Volvo", "BMW", "Toyota");
array_push($cars,"BMW");
$map = array_combine($cars, $cars);