如何为容器内多个列表实现统一滚动条.txt
array_unique保留原始键名且不重排索引需用array_values重置默认松散比较易误删多维数组不递归不支持对象/资源大数据量时性能较差手写isset去重更快。array_unique 会保留原始键名不是重排索引直接用 array_unique 去重后数组的数字键可能不连续比如 [0 a, 2 b, 5 a] 去重后变成 [0 a, 2 b]而不是你想要的 [0 a, 1 b]。如果后续要遍历、JSON 输出或传给前端建议手动重置键array_values(array_unique($arr))array_unique 对字符串和整数默认按「松散比较」处理1 和 1 会被视为相同 —— 这在混合类型数组里容易误删它不递归多维数组每个子数组被当做一个整体比较不会深入比对内部元素去重时要注意 $sort_flags 参数的实际效果array_unique 的第二个参数控制比较方式但只影响「排序行为」不影响去重逻辑本身PHP 7.2 才支持该参数低版本传了也无效。SORT_STRING默认按字符串规则比较0 和 0 相同SORT_REGULAR按类型值严格比较0 ! 0能避免类型混淆导致的误去重SORT_NUMERIC把所有值转为数字再比1、1、1.0 全算一样 —— 用前确认业务是否允许这种隐式转换遇到对象或资源类型会报 Warning 并跳过array_unique 不支持对象、资源、闭包等不可序列化类型遇到时会触发 Warning: array_unique(): Array contains elements that cannot be compared并把它们原样保留在结果中不去重也不报错退出。若数组里混有对象先用 array_map 提取可比字段例如array_unique(array_column($arr, id))想彻底过滤掉非标量值得自己写循环 is_scalar() 判断注意即使对象实现了 __toString()也不会被自动调用用于比较大数据量下性能明显下降别无脑用array_unique 底层是哈希去重时间复杂度接近 O(n)但 PHP 实现中会做多次内部拷贝和类型判断实测 10 万以上字符串元素时比手写 foreach isset($seen[$v]) 慢 2–3 倍。 Cleanup.pictures 智能移除图片中的物体、文本、污迹、人物或任何不想要的东西