Ich möchte überprüfen, ob zwei Arrays gleich sind. Ich meine: gleiche Größe, gleicher Index, gleiche Werte. Wie kann ich das machen?
!==
Ich gehe davon aus, dass bei Verwendung der von einem Benutzer vorgeschlagenen Verwendung die Eingabetaste gedruckt wird , wenn mindestens ein Element in den Arrays unterschiedlich ist, dies jedoch nicht der Fall ist.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
=
zu viel, es sollte!==
oder!=
['a'] == [0]
isttrue
. Nun, das ist nur PHP.Antworten:
Siehe Array-Operatoren .
BEARBEITEN
Der Ungleichungsoperator ist,
!=
während der Nichtidentitätsoperator!==
mit dem Gleichheitsoperator==
und dem Identitätsoperator übereinstimmen soll===
.quelle
array_values($a)==array_values($b)
... Ein weiteres übliches Problem sind eindeutige Werte. Denken Sie also daran, dass diese vorhanden sindarray_unique()
.==
funktioniert unabhängig von der Reihenfolge nur für typische Wörterbücher wie[1 => 'a', 2 => 'b']
. Zum Beispiel[1 => 'a', 2 => 'b'] == [2 => 'b', 1 => 'a']
. Für indizierte Arrays['a', 'b']
==
funktioniert wie nicht wie angegeben. Zum Beispiel['a', 'b'] != ['b', 'a']
.['a', 'b']
ist ein Array[0 => 'a', 1 => 'b']
, während['b', 'a']
es ein Array ist[0 => 'b', 1 => 'a']
. Deshalb haben sie nicht die gleichen Schlüssel / Wert-Paare wie in meiner Antwort angegeben und deshalb==
funktioniert es nicht zwischen diesen.Nach dieser Seite .
HINWEIS: Die akzeptierte Antwort funktioniert für assoziative Arrays, funktioniert jedoch nicht wie erwartet mit indizierten Arrays (siehe unten). Wenn Sie einen von beiden vergleichen möchten, verwenden Sie diese Lösung. Diese Funktion funktioniert möglicherweise auch nicht mit mehrdimensionalen Arrays (aufgrund der Art der Funktion array_diff).
Testen von zwei indizierten Arrays, deren Elemente sich in unterschiedlicher Reihenfolge befinden, mit
$a == $b
oder ohne$a === $b
Fehler, zum Beispiel:Das liegt daran, dass das oben Genannte bedeutet:
array(0 => "x", 1 => "y")
vs.array(0 => "y", 1 => "x")
.Verwenden Sie zur Lösung dieses Problems:
Der Vergleich der Arraygrößen wurde hinzugefügt (von super_ton vorgeschlagen), da dies die Geschwindigkeit verbessern kann.
quelle
array_diff
den Vergleich beschleunigen könnte. Ich werde es hinzufügen. Danke$a = [1, 2, 2]; $b = [2, 1, 1];
und es wurde zurückgegebentrue
, aber die beiden Arrays sind offensichtlich nicht gleich.Versuchen Sie, zu serialisieren. Dadurch werden auch verschachtelte Subarrays überprüft.
quelle
Kurze Lösung, die auch mit Arrays funktioniert, deren Schlüssel in unterschiedlicher Reihenfolge angegeben werden:
quelle
Vergleichen Sie sie als andere Werte:
Informationen zu allen Array-Operatoren finden Sie hier: http://php.net/manual/en/language.operators.array.php Beachten Sie beispielsweise, dass
===
auch die Typen und die Reihenfolge der Elemente in den Arrays identisch sind.quelle
===
je nach gewünschtem Verhalten.!===
funktioniert nicht, da es sich um einen Syntaxfehler handelt. Der richtige Weg ist!==
(nicht drei "gleich" Symbole)quelle
Aus meiner Sicht ist es besser, array_diff als array_intersect zu verwenden, da bei Überprüfungen dieser Art die üblicherweise zurückgegebenen Unterschiede geringer sind als die Ähnlichkeiten. Auf diese Weise ist die Bool-Konvertierung weniger speicherhungrig.
Bearbeiten Beachten Sie, dass diese Lösung für einfache Arrays gilt und die oben angegebenen == und === ergänzt, die nur für Wörterbücher gültig sind.
quelle
Eine andere Methode zum Überprüfen der Gleichheit unabhängig von der Wertreihenfolge funktioniert mithilfe von http://php.net/manual/en/function.array-intersect.php wie folgt:
Hier ist eine Version, die auch mit mehrdimensionalen Arrays unter Verwendung von http://php.net/manual/en/function.array-uintersect.php funktioniert :
quelle
array_diff - Berechnet die Differenz der Arrays
http://php.net/manual/en/function.array-diff.php
quelle
array_diff
kann dir das nicht sagen. Versuchen Sie esarray_diff([1, 2], [1, 2, 'hello'])
.quelle
Ein Weg: (Implementierung von 'als gleich angesehen' für http://tools.ietf.org/html/rfc6902#section-4.6 )
Auf diese Weise können assoziative Arrays, deren Mitglieder unterschiedlich geordnet sind, z. B. in jeder Sprache außer PHP als gleich angesehen werden :)
quelle
$a[$key] = rksort($a[$key]);
Syntaxproblem auf Ihren Arrays
quelle
Hier ist das Beispiel, wie Sie mit Arrays vergleichen und herausfinden, was zwischen ihnen unterschiedlich ist.
Ergebnis:
quelle
Verwenden Sie die PHP-Funktion array_diff (array1, array2).
Es wird der Unterschied zwischen Arrays zurückgegeben. Wenn es leer ist, sind sie gleich.
Beispiel:
Beispiel 2:
quelle
(count(array_diff($a1, $a2)) + count(array_diff($a2, $a1))) === 0
zu testen, ob Arrays "gleich" sindWenn Sie nicht assoziative Arrays überprüfen möchten, finden Sie hier die Lösung:
quelle