php array 实现set
实现 PHP 数组模拟 Set 功能
PHP 数组本身是键值对结构,但可以通过特定方法模拟 Set(集合)的特性,如元素唯一性、快速查找等。
使用键名确保唯一性
利用 PHP 数组键名不可重复的特性,将值作为键名存储,实现唯一性:
$set = [];
$values = [1, 2, 2, 3, 4, 4];
foreach ($values as $value) {
$set[$value] = true;
}
// 获取唯一值列表
$uniqueValues = array_keys($set);
检查元素是否存在
通过 isset 或 array_key_exists 快速检查元素是否存在:
if (isset($set[2])) {
// 元素存在
}
添加元素
直接通过键名赋值即可添加元素:
$set[5] = true;
删除元素
使用 unset 移除元素:
unset($set[3]);
集合运算
实现并集、交集、差集等操作:
// 并集
$union = $set1 + $set2;
// 交集
$intersection = array_intersect_key($set1, $set2);
// 差集(set1 有而 set2 无)
$difference = array_diff_key($set1, $set2);
性能考虑
- 键名查找的复杂度为 O(1),适合频繁查找场景
- 内存消耗略高于普通数组,因为需要存储额外值(如
true)
完整示例
class ArraySet {
private $elements = [];
public function add($value) {
$this->elements[$value] = true;
}
public function contains($value) {
return isset($this->elements[$value]);
}
public function remove($value) {
unset($this->elements[$value]);
}
public function values() {
return array_keys($this->elements);
}
}
这种方法在大多数 PHP 场景下性能良好,如果需要更专业的集合实现,可以考虑 SPL 的 SplObjectStorage 或第三方库。







