You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:54:05