374 Stimmen

PHP - Prüfen, ob zwei Arrays gleich sind

Ich möchte prüfen, ob zwei Arrays gleich sind. Ich meine: gleiche Größe, gleicher Index, gleiche Werte. Wie kann ich das tun?

Verwendung von !== wie von einem Benutzer vorgeschlagen, erwarte ich, dass das Folgende gedruckt würde eingeben. wenn mindestens ein Element in dem/den Array(s) unterschiedlich ist, was jedoch nicht der Fall ist.

if (($_POST['atlOriginal'] !== $oldAtlPosition) 
    or ($_POST['atl'] !== $aext) 
    or ($_POST['sidesOriginal'] !== $oldSidePosition) 
    or ($_POST['sidesOriginal'] !== $sideext)) {

    echo "enter";
}

697voto

Stefan Gehrig Punkte 80686
$arraysAreEqual = ($a == $b); // TRUE if $a and $b have the same key/value pairs.
$arraysAreEqual = ($a === $b); // TRUE if $a and $b have the same key/value pairs in the same order and of the same types.

Véase Array-Operatoren .

EDITAR

Der Ungleichheitsoperator lautet != und der Nicht-Identitäts-Operator ist !== um die Gleichheit zu gewährleisten Operator == und der Identitätsoperator === .

119voto

lepe Punkte 23471

Según diese Seite .

HINWEIS: Die akzeptierte Antwort funktioniert für assoziative Arrays, aber sie funktioniert nicht wie erwartet mit indizierten Arrays (siehe unten). Wenn Sie eines von beiden vergleichen wollen, dann verwenden Sie diese Lösung. Außerdem funktioniert diese Funktion möglicherweise nicht mit mehrdimensionalen Arrays (aufgrund der Natur der array_diff-Funktion).

Testen zweier indizierter Arrays, deren Elemente in unterschiedlicher Reihenfolge angeordnet sind, mit $a == $b ou $a === $b versagt zum Beispiel:

<?php
    (array("x","y") == array("y","x")) === false;
?>

Das liegt daran, dass die oben genannten Mittel:

array(0 => "x", 1 => "y") vs. array(0 => "y", 1 => "x") .

Um dieses Problem zu lösen, verwenden Sie:

<?php
function array_equal($a, $b) {
    return (
         is_array($a) 
         && is_array($b) 
         && count($a) == count($b) 
         && array_diff($a, $b) === array_diff($b, $a)
    );
}
?>

Der Vergleich von Array-Größen wurde hinzugefügt (vorgeschlagen von super_ton), da dies die Geschwindigkeit verbessern kann.

40voto

Iggi Punkte 409

Versuchen Sie serialisieren. Dies wird auch verschachtelte Subarrays überprüfen.

$foo =serialize($array_foo);
$bar =serialize($array_bar);
if ($foo == $bar) echo "Foo and bar are equal";

37voto

Samuel Vicent Punkte 921

Kurze Lösung, die auch mit Arrays funktioniert, deren Schlüssel in unterschiedlicher Reihenfolge angegeben sind:

public static function arrays_are_equal($array1, $array2)
{
    array_multisort($array1);
    array_multisort($array2);
    return ( serialize($array1) === serialize($array2) );
}

18voto

dılo sürücü Punkte 2737
function compareIsEqualArray(array $array1,array $array2):bool
{

   return (array_diff($array1,$array2)==[] && array_diff($array2,$array1)==[]);

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X