Есть ли у PHP 5.x какой-то HashSet или Set Class?

Я привык к Java, где у меня есть HashSets , ArrayLists и другие Collections . Но сейчас я работаю над проектом PHP.

Мне нужно создать набор, заполнить этот набор объектами (строки в этом случае), но Set может содержать только каждый объект один раз. Кроме того, я хочу удалить определенный объект в конце из этого набора, если он существует. Это было бы довольно легко с классами Java-классов. Но как я могу реализовать это в PHP?

Существуют ли какие-либо методы array() которые мне не хватает? Я использую PHP 5.3.

Документация PHP говорит:

Массив в PHP на самом деле является упорядоченной картой. Карта – это тип, который связывает значения с ключами. Этот тип оптимизирован для нескольких различных применений; он может рассматриваться как массив, список (вектор), хеш-таблица (реализация карты), словарь, коллекция, стек, очередь и, возможно, больше. В качестве значений массива могут быть другие массивы, также возможны деревья и многомерные массивы.

Итак, maybee (!) Вам не нужен HashSet, потому что нормальный массив реализуется уже как своего рода оптимизированная структура индекса 🙂

Если это просто строки, вы можете использовать массивы в качестве наборов:

 $arr['str1'] = null; $arr['str2'] = null; $arr['str1'] = null; print_r(array_keys($arr)); 

Вы только потенциальная проблема заключается в том, что числовые строки неявно преобразуются в целые числа, если это возможно. Но это обычно не проблема в PHP, потому что тип не имеет значения в большинстве случаев.

Я не совсем уверен, но я думаю, что SplObjectStorage делает то, что вы хотите:

http://php.net/manual/en/class.splobjectstorage.php

О, и строки не являются объектами. Поэтому вы можете просто сделать это:

 $foo['bar'] = true; 

и массив будет работать как способ уникального хранения строк.

 $values = array(1, 3, 6, 4, 3, 3, 7, 1); $hashset = array(); foreach ($values as $value){ if (!array_key_exists($value, $hashset)){ echo $value." "; $hashset[$value] = true; } } 

Печать: 1 3 6 4 7