2010-09-30 7 views
8

Gibt es eine einfache Möglichkeit zu überprüfen, ob alle Werte im Array gleich sind?Überprüfen aller Array-Werte auf einmal

In diesem Fall wäre es falsch zurück:

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

Und in diesem Fall wahr:

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

Also, ja, gibt es eine Funktion/Methode alle Array-Werte zu überprüfen, um Einmal?

Vielen Dank im Voraus!

+0

ich dachte nicht, dass es eine sehr interessante Frage war, aber es ist eine coole Vielzahl von Antworten. Nett. – Hans

+0

@Hans Einverstanden, jede Antwort hat ihren eigenen Twist, sehr interessante Ergebnisse! – jolt

Antwort

29

Nicht eine einzige Funktion, aber das gleiche leicht erreicht werden könnte mit (?):

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

Von allen bereitgestellten Lösungen war dies am einfachsten zu verstehen, bietet die meisten Funktionen und ist wirklich einfach! +1, akzeptiert. Riesiger Bonus für diesen "Ja" Scheck. – jolt

+0

array_keys ist in der Tat besser als array_count_values, weil Sie auch nach array/object Elementen suchen und strikte Vergleiche erzwingen können, wenn gewünscht – user187291

+0

Vergessen Sie nicht, den strict Parameter zu setzen, wenn Ihr Wert etwa 0 --- array_keys ($ array, 0 , wahr) – abimelex

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

oder besser

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

eine weitere mögliche Option

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

Am elegantesten und intelligentesten. Natürlich muss 'count()' '' 'sein mit [array_unique()] (http://php.net/manual/en/function.array-unique.php), weil es" ein neues Array ohne doppelte Werte zurückgibt . " –

1

"Alle Werte gleich" entspricht "allen Werten" gleich dem ersten Element“, so würde ich so etwas tun:

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

Hier ist noch eine weitere Möglichkeit, darüber zu gehen,

In meinem Fall array_diff mit Listen verwenden, hatte ich gegen Arrays testen das hatte alle leeren Saiten:

$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 
} 
Verwandte Themen