2010-09-30 62 views
8

有没有简单的方法来检查数组中的所有值是否相等?一次检查所有数组值

在这种情况下,它会返回false:

$array[0] = 'yes'; 
$array[1] = 'yes'; 
$array[2] = 'no'; 

在这种情况下,真正:

$array[0] = 'yes'; 
$array[1] = 'yes'; 
$array[2] = 'yes'; 

所以,是的,是有一个函数/方法来检查所有数组值在一旦?

在此先感谢!

+0

我不认为这是一个非常有趣的问题,但有一个很酷的各种各样的答案。尼斯。 – Hans 2010-09-30 11:09:39

+0

@Hans同意,每一个答案都有它自己独特的转折,非常有趣的结果! – jolt 2010-09-30 11:13:49

回答

29

不是一个单一的功能,但同样可以用轻松实现(?):

count(array_keys($array, 'yes')) == count($array) 
+0

从所有提供的解决方案中,这是最容易理解的,提供了大多数功能并且非常简单! +1,已接受。这是'是'检查巨大的奖金。 – jolt 2010-09-30 11:07:11

+0

array_keys确实比array_count_values更好,因为您还可以检查数组/对象元素并在需要时强制进行严格比较 – user187291 2010-09-30 12:11:17

+0

当您的值类似于0时,请不要忘记设置strict参数--- array_keys($ array,0 ,真) – abimelex 2013-03-07 14:35:15

2
if($a === array_fill(0, count($a), end($a))) echo "all items equal!"; 

或更好

if(count(array_count_values($a)) == 1)... 
8

另一种可能的选择

if(count(array_unique($array)) == 1) 
+0

最优雅,最聪明。当然,'count()'必须是[1]与[array_unique()](http://php.net/manual/en/function.array-unique.php),因为它“返回一个没有重复值的新数组“。 – 2017-09-27 11:12:25

1

“所有值都相同”相当于“所有值等于第一要素”,所以我会做这样的事情:

function array_same($array) { 
    if (count($array)==0) return true; 

    $firstvalue=$array[0]; 
    for($i=1; $i<count($array); $i++) { 
     if ($array[$i]!=$firstvalue) return false; 
    } 
    return true; 
} 
0

这里的另一种方式去了解它,使用array_diff使用列表

就我而言,我不得不再次进行测试阵列,现在差不多都空字符串:

$empty_array = array('','',''); // i know ahead of time that array has three elements 
$array_2d = array(); 
for($array_2d as $arr) 
    if(array_diff($arr,$empty_arr)) // 
     do_stuff_with_non_empty_array() 
0
if(count(array_unique($array)) === count($array)) { 
    // all items in $array are the same 
}else{ 
    // at least one item is different 
}