我已经习惯了Java HashSets
,ArrayLists
和其他Collections
。但我现在正在开发一个PHP项目。
我需要创建一个集合,用对象填充该集合(在本例中为字符串),但集合只能包含每个对象一次。另外我想从这个集合中删除某个对象(如果存在)。使用Java集合类可以很容易。但是我如何在PHP中实现它?
我遗失了array()
的任何方法吗?我正在使用PHP 5.3。
答案 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