Chciałbym sprawdzić, czy dwie tablice są równe. Mam na myśli: ten sam rozmiar, ten sam indeks, te same wartości. Jak mogę to zrobić?
Używając !==
zgodnie z sugestią użytkownika, spodziewam się, że następujące polecenie wypisze polecenie enter, jeśli co najmniej jeden element w tablicy (ach) jest inny, ale w rzeczywistości tak nie jest.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
=
zbyt dużo, powinno być!==
albo!=
['a'] == [0]
jesttrue
. To tylko PHP.Odpowiedzi:
Zobacz Operatory macierzy .
EDYTOWAĆ
Operator nierówności polega na tym
!=
, że operator braku tożsamości ma!==
dopasować operator równości==
i operator tożsamości===
.źródło
array_values($a)==array_values($b)
... Kolejnym typowym problemem są unikalne wartości, więc pamiętaj, że istniejąarray_unique()
.==
działa niezależnie od kolejności tylko dla typowych słowników takich jak[1 => 'a', 2 => 'b']
. Dla np[1 => 'a', 2 => 'b'] == [2 => 'b', 1 => 'a']
. W przypadku indeksowanych tablic, jak['a', 'b']
==
nie działa, jak podano. Dla np['a', 'b'] != ['b', 'a']
.['a', 'b']
jest tablicą[0 => 'a', 1 => 'b']
, podczas gdy['b', 'a']
jest tablicą[0 => 'b', 1 => 'a']
. Dlatego nie mają takich samych par klucz / wartość, jak podano w mojej odpowiedzi i dlatego==
nie działa między nimi.Według tej strony .
UWAGA: Akceptowana odpowiedź działa dla tablic asocjacyjnych, ale nie będzie działać zgodnie z oczekiwaniami w przypadku tablic indeksowanych (wyjaśnione poniżej). Jeśli chcesz porównać jedno z nich, skorzystaj z tego rozwiązania. Ponadto ta funkcja może nie działać z tablicami wielowymiarowymi (ze względu na naturę funkcji array_diff).
Testowanie dwóch indeksowanych tablic, których elementy są w innej kolejności, przy użyciu
$a == $b
lub$a === $b
niepowodzenia, na przykład:Jest tak, ponieważ powyższe oznacza:
array(0 => "x", 1 => "y")
vsarray(0 => "y", 1 => "x")
.Aby rozwiązać ten problem, użyj:
Dodano porównywanie rozmiarów tablic (sugerowane przez super_ton), ponieważ może to poprawić prędkość.
źródło
array_diff
może przyspieszyć porównanie. Dodam to. Dzięki$a = [1, 2, 2]; $b = [2, 1, 1];
i powróciłotrue
, ale dwie tablice oczywiście nie są takie same.Spróbuj serializować. Spowoduje to również sprawdzenie zagnieżdżonych podstron.
źródło
Krótkie rozwiązanie, które działa nawet z tablicami, których klucze są podawane w innej kolejności:
źródło
Porównaj je z innymi wartościami:
Możesz przeczytać o wszystkich operatorach tablic tutaj: http://php.net/manual/en/language.operators.array.php Uwaga, na przykład, że
===
sprawdza również, czy typy i kolejność elementów w tablicach są takie same.źródło
===
zależności od pożądanego zachowania.!===
nie będzie działać, ponieważ jest to błąd składniowy. Prawidłowy sposób to!==
(nie trzy symbole „równe”)źródło
Z mojego pov lepiej jest użyć array_diff niż array_intersect, ponieważ przy sprawdzeniach tego rodzaju różnice zwykle zwracane są mniejsze niż podobieństwa, w ten sposób konwersja bool jest mniej wymagająca pamięci.
Edytuj Zauważ, że to rozwiązanie jest dla prostych tablic i uzupełnia powyższe == i ===, które jest ważne tylko dla słowników.
źródło
array_diff - Oblicza różnicę tablic
http://php.net/manual/en/function.array-diff.php
źródło
array_diff
nie mogę ci tego powiedzieć. Spróbowaćarray_diff([1, 2], [1, 2, 'hello'])
.Inna metoda sprawdzania równości bez względu na kolejność wartości działa przy użyciu http://php.net/manual/en/function.array-intersect.php , na przykład:
Oto wersja, która działa również z tablicami wielowymiarowymi przy użyciu http://php.net/manual/en/function.array-uintersect.php :
źródło
źródło
Jeden sposób: (wdrożenie „uważane za równe” dla http://tools.ietf.org/html/rfc6902#section-4.6 )
W ten sposób tablice asocjacyjne, których członkowie są uporządkowane inaczej - np. Będą uważane za równe w każdym języku oprócz php :)
źródło
$a[$key] = rksort($a[$key]);
Problem ze składnią twoich tablic
źródło
Oto przykład, jak porównać do tablic i uzyskać różnicę między nimi.
Wynik:
źródło
Użyj funkcji php array_diff (array1, array2);
Zwróci różnicę między tablicami. Jeśli jest pusty, to są równi.
przykład:
Przykład 2:
źródło
(count(array_diff($a1, $a2)) + count(array_diff($a2, $a1))) === 0
do przetestowania, czy tablice są „równe”Jeśli chcesz sprawdzić tablice niepowiązane, oto rozwiązanie:
źródło