PHP如何判断数组中除一个元素外其余全部值相同
PHP判断数组仅一个元素与其余不同的实现方案
核心思路是统计数组元素的出现频次,只要存在某一值的出现次数等于数组总长度减1,即符合需求。
基础实现(适用于元素为字符串/整型等标量类型的数组)
使用PHP内置的array_count_values()函数直接统计频次,代码简洁高效:
function hasAllSameExceptOne(array $arr): bool { $total = count($arr); // 数组长度小于2时不可能满足需求 if ($total < 2) { return false; } // 统计所有元素的出现次数 $freq = array_count_values($arr); foreach ($freq as $count) { // 存在元素出现次数为总长度减1,符合要求 if ($count === $total - 1) { return true; } } return false; }
测试示例
// 示例1:5个元素中有4个相同,返回true var_dump(hasAllSameExceptOne([3,3,9,3,3])); // bool(true) // 示例2:多个不同值,返回false var_dump(hasAllSameExceptOne([1,2,1,3,2])); // bool(false) // 示例3:2个元素完全不同,符合“仅一个不同”的要求,返回true var_dump(hasAllSameExceptOne([5,7])); // bool(true)
兼容非标量元素的版本
如果数组元素包含对象、数组等非标量类型,array_count_values()无法直接统计,可先序列化元素再统计:
function hasAllSameExceptOneCompat(array $arr): bool { $total = count($arr); if ($total < 2) { return false; } $serialized = array_map('serialize', $arr); $freq = array_count_values($serialized); foreach ($freq as $count) { if ($count === $total - 1) { return true; } } return false; }
内容的提问来源于stack exchange,提问作者Aseel Ashraf
相关产品推荐
相关产品推荐

