18

我已经习惯了我拥有的 JavaHashSetsArrayLists其他Collections. 但我现在正在做一个 PHP 项目。

我需要创建一个集合,用对象(在本例中为字符串)填充该集合,但集合只能包含每个对象一次。另外,如果存在,我想最终从该集合中删除某个对象。对于 Java 集合类,这将非常容易。但是我怎样才能在 PHP 中实现呢?

有没有array()我遗漏的方法?我正在使用 PHP 5.3。

4

4 回答 4

9

如果它只是字符串,您可以使用数组作为集合:

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

print_r(array_keys($arr));

您唯一的潜在问题是,如果可能的话,数字字符串会被隐式转换为整数。但这在 PHP 中通常不是问题,因为在大多数情况下类型并不重要。

于 2011-11-19T15:01:51.550 回答
5

PHP 文档说:

PHP 中的数组实际上是一个有序映射。映射是将值与键相关联的类型。这种类型针对几种不同的用途进行了优化;它可以被视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等等。由于数组值可以是其他数组,因此树和多维数组也是可能的。

所以也许(!)你不需要一个HashSet,因为一个普通的数组已经作为一种优化的索引结构实现了:)

于 2011-11-19T14:49:26.347 回答
2

我不确定,但我认为SplObjectStorage可以满足您的要求:

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

哦,字符串不是对象。所以你可以这样做:

$foo['bar'] = true;

并且该数组将作为唯一存储字符串的一种方式。

于 2011-01-19T01:29:36.900 回答
0
$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

于 2016-05-22T10:15:58.647 回答