有谁知道我将如何工作,如果在一个数组中的所有元素,但一个有相同的值?
多年来我一直试图解决这个问题,但无法解决。例如,测试一个有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;
}