PHP 5.x是否有某种HashSet或Set Class?

时间:2011-01-19 01:00:35

标签: php data-structures spl

我已经习惯了Java HashSetsArrayLists和其他Collections。但我现在正在开发一个PHP项目。

我需要创建一个集合,用对象填充该集合(在本例中为字符串),但集合只能包含每个对象一次。另外我想从这个集合中删除某个对象(如果存在)。使用Java集合类可以很容易。但是我如何在PHP中实现它?

我遗失了array()的任何方法吗?我正在使用PHP 5.3。

4 个答案:

答案 0 :(得分:6)

PHP文档说:

  

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

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

答案 1 :(得分:4)

如果它只是字符串,则可以将数组用作集:

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

print_r(array_keys($arr));

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

答案 2 :(得分:2)

我不确定,但我认为SplObjectStorage可以做你想要的事情:

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

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

$foo['bar'] = true;

,数组将作为唯一存储字符串的方式。

答案 3 :(得分: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