Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

$arr['str1'] = null;
$arr['str2'] = null;
$arr['str1'] = null;

print_r(array_keys($arr));

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

Ответ 3

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

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

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

$foo['bar'] = true;

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

Ответ 4

$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