php用关联数组键的唯一性模拟集合,支持添加、存在判断、删除等操作;可封装为set类;支持并交差等集合运算;需注意键类型转换和边界情况。

PHP 数组本身不是专门的集合(Set)数据结构,但可以通过数组键(key)的唯一性来模拟集合行为——这是最常用、最轻量的实现方式。
用关联数组键模拟集合
PHP 关联数组的键天然不重复,且查找时间复杂度接近 O(1),因此把元素作为键、值设为 任意固定值(如 true 或 1),即可实现去重、存在性判断等集合核心操作。
- 添加元素:
$set['apple'] = true; - 判断存在:
isset($set['apple'])(比in_array()快得多) - 删除元素:
unset($set['apple']); - 获取所有元素:
array_keys($set) - 清空集合:
$set = [];
封装成简单集合类(可选)
若项目中集合操作频繁,可封装一个轻量类统一接口,避免重复写 isset() 和 unset():
class Set {
private $data = [];
public function add($item) {
$this->data[$item] = true;
return $this;
}
public function has($item) {
return isset($this->data[$item]);
}
public function remove($item) {
unset($this->data[$item]);
return $this;
}
public function values() {
return array_keys($this->data);
}
public function size() {
return count($this->data);
}
}
注意:该方式仅适用于字符串或整数键(PHP 数组键自动转换),对象或数组不能直接作键;如需支持任意类型,需配合序列化或哈希处理(会损失部分性能和可读性)。
专为中小型企业定制的网络办公软件,富有竞争力的十大特性: 1、独创 web服务器、数据库和应用程序全部自动傻瓜安装,建立企业信息中枢 只需3分钟。 2、客户机无需安装专用软件,使用浏览器即可实现全球办公。 3、集成Internet邮件管理组件,提供web方式的远程邮件服务。 4、集成语音会议组件,节省长途话费开支。 5、集成手机短信组件,重要信息可直接发送到员工手机。 6、集成网络硬
立即学习“PHP免费学习笔记(深入)”;
与原生函数配合实现集合运算
PHP 提供了多个数组函数,可直接用于集合计算:
- 并集:
$union = $setA + $setB;(+ 保留左侧键,推荐用array_merge(array_keys($setA), array_keys($setB))后去重) - 交集:
array_intersect_key($setA, $setB)(返回 $setA 中键也存在于 $setB 的部分) - 差集(A − B):
array_diff_key($setA, $setB) - 对称差集:先并再减交(
array_merge(array_diff_key($a,$b), array_diff_key($b,$a)))
注意事项与边界情况
用数组模拟集合虽便捷,但需留意几点:
- 键会被强制转为字符串或整数,
true、1、"1"、1.0在键层面等价 - 空字符串
""、0、false、null作键时可能被混淆,建议避免或显式类型转换 - 不支持重复元素是“副作用”,不是语义保证;如需强契约,仍建议用 SPL 的
ArrayObject扩展或第三方库(如ds\Set,需启用 ds 扩展)










