判断PHP中除一个数组元素外是否所有元素都相同



有谁知道我将如何工作,如果在一个数组中的所有元素,但一个有相同的值?

多年来我一直试图解决这个问题,但无法解决。例如,测试一个有5个元素的数组,看看它是否有4个相同的值。

使用Barmar评论中的想法:

function allTheSameExceptOne(array $input): bool
{
$counts = array_count_values($input);
return count($counts) == 2 && min($counts) == 1;
}
  • count($counts) == 2检查数组中只有两个不同的元素,如果为真,则

  • min($counts) == 1检查其中一个只出现一次

注意array_count_values()只能计数字符串和整数值,所以如果你的数组中有其他类型,你需要比这更复杂的东西。

这是非常奇怪的检查,但是下面的函数正在检查

function check(array $array): bool {
$uniq = [];
foreach ($array as $value) {
if (count($uniq) > 2) {
return false;
}

if (!isset($uniq[$value])) {
$uniq[$value] = 1;
continue;
}

foreach ($uniq as $uniqValue => $count) {
if ($count > 1 && $uniqValue !== $value) {
return false;
}
}

$uniq[$value]++;
}
return count($uniq) === 2;
}

最新更新