2010-09-30 86 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 
}