php数组去重最常用的是array_unique()和array_flip()+array_keys():前者保留首次出现的元素及原始键名,适合多数一维场景;后者通过键唯一性实现更快去重,但丢失顺序与键名,且仅支持字符串和整数。

PHP数组去重最常用、最实用的两种方法是 array_unique() 和 array_flip() 配合 array_keys()。它们适用场景不同,性能和行为也有明显差异,选对方法能避免踩坑。
用 array_unique() 保留首次出现的元素
这是官方推荐的标准方式,适合绝大多数一维数组去重需求。
- 自动保留每个值第一次出现的位置,连带原始键名(索引数组会保留数字键,关联数组保留字符串键)
- 支持字符串、整数、浮点数等标量值,对类型敏感(
'1'和1被视为不同) - 若需连续数字索引,可套用
array_values(array_unique($arr)) - 不支持多维数组——直接传入二维数组会警告并原样返回,必须先序列化再处理
用 array_flip() + array_keys() 快速去重
利用“数组键名天然唯一”这一特性,通过两次翻转实现去重,效率通常高于 array_unique()。
- 先
array_flip($arr)把值变键,重复值会被覆盖(只保留最后一次出现的键值对) - 再
array_keys(array_flip($arr))提取所有键,即得到去重后的值列表 - 结果顺序不保证是首次出现顺序,且原始键名全部丢失
- 仅适用于值为字符串或整数的一维数组;含
null、array、object会报错或静默失败
怎么选?看需求
需要保持原始顺序和键名 → 用 array_unique();只求快、不关心顺序和键 → array_flip() + array_keys() 更轻量。两者都不适合多维数组,后者对数据类型更挑剔,但小数据量下性能优势明显。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











