php 实现set
PHP 实现 Set 数据结构
PHP 原生没有专门的 Set 数据结构,但可以通过数组或 SplObjectStorage 模拟实现。以下是几种常见方法:
使用关联数组模拟 Set
通过数组键的唯一性实现去重功能:

$set = [];
$set['key1'] = true; // 添加元素
$set['key2'] = true;
unset($set['key1']); // 删除元素
isset($set['key2']); // 检查存在性
使用 SplObjectStorage 存储对象集合
适合存储对象实例的 Set:
$set = new SplObjectStorage();
$obj1 = new stdClass();
$obj2 = new stdClass();
$set->attach($obj1); // 添加对象
$set->detach($obj1); // 移除对象
$set->contains($obj2); // 检查存在
使用 Ds\Set 扩展(PHP 7+)
安装数据结构扩展后可直接使用高效实现:

$set = new \Ds\Set();
$set->add('value'); // 添加元素
$set->remove('value'); // 删除元素
$set->contains('value'); // 检查存在
实现自定义 Set 类
封装数组操作实现完整 Set 功能:
class Set {
private $elements = [];
public function add($item) {
$this->elements[$item] = true;
}
public function delete($item) {
unset($this->elements[$item]);
}
public function has($item) {
return isset($this->elements[$item]);
}
public function values() {
return array_keys($this->elements);
}
}
选择方案时应考虑:
- 基础数组方案兼容性最好
- Ds\Set 提供最高性能
- SplObjectStorage 专为对象设计
- 自定义类灵活性最强





