Me gustaría comprobar si dos matrices son iguales. Quiero decir: mismo tamaño, mismo índice, mismos valores. ¿Cómo puedo hacer eso?
Utilizando !==
según lo sugerido por un usuario, espero que lo siguiente imprima enter si al menos un elemento en la matriz (s) es diferente, pero de hecho no lo hace.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
=
demasiado, debería ser!==
o!=
['a'] == [0]
estrue
. Bueno, esto es solo PHP.Respuestas:
Ver Operadores de matrices .
EDITAR
El operador de desigualdad es
!=
mientras que el operador de no identidad!==
debe coincidir con el operador de igualdad==
y el operador de identidad===
.fuente
array_values($a)==array_values($b)
... Otro problema habitual es sobre valores únicos, así que recuerda que existenarray_unique()
.==
funciona independientemente del orden solo para diccionarios típicos como[1 => 'a', 2 => 'b']
. Por ej[1 => 'a', 2 => 'b'] == [2 => 'b', 1 => 'a']
. Para matrices indexadas como['a', 'b']
==
no funciona como se indica. Por ej['a', 'b'] != ['b', 'a']
.['a', 'b']
es una matriz[0 => 'a', 1 => 'b']
, mientras que['b', 'a']
es una matriz[0 => 'b', 1 => 'a']
. Es por eso que no tienen los mismos pares clave / valor como se indica en mi respuesta y es por eso==
que no funciona entre ellos.De acuerdo a esta página .
NOTA: La respuesta aceptada funciona para matrices asociativas, pero no funcionará como se esperaba con las matrices indexadas (explicadas a continuación). Si desea comparar cualquiera de ellos, use esta solución. Además, esta función puede no funcionar con matrices multidimensionales (debido a la naturaleza de la función array_diff).
Probar dos matrices indexadas, qué elementos están en diferente orden, usando
$a == $b
o$a === $b
fallando, por ejemplo:Eso es porque lo anterior significa:
array(0 => "x", 1 => "y")
vsarray(0 => "y", 1 => "x")
.Para resolver ese problema, use:
Se agregó la comparación de tamaños de matriz (sugerida por super_ton) ya que puede mejorar la velocidad.
fuente
array_diff
podría acelerar la comparación. Lo agregaré Gracias$a = [1, 2, 2]; $b = [2, 1, 1];
y regresótrue
, pero las dos matrices obviamente no son lo mismo.Intenta serializar. Esto verificará también las submatrices anidadas.
fuente
Solución corta que funciona incluso con matrices cuyas claves se dan en diferente orden:
fuente
Compárelos como otros valores:
Puede leer sobre todos los operadores de matriz aquí: http://php.net/manual/en/language.operators.array.php Tenga en cuenta, por ejemplo, que
===
también comprueba que los tipos y el orden de los elementos en las matrices son los mismos.fuente
===
dependiendo del comportamiento deseado.!===
no funcionará porque es un error de sintaxis. La forma correcta es!==
(no tres símbolos "iguales a")fuente
Desde mi punto de vista, es mejor usar array_diff que array_intersect porque con las comprobaciones de esta naturaleza, las diferencias devueltas suelen ser menores que las similitudes, de esta manera la conversión de bool consume menos memoria.
Editar Tenga en cuenta que esta solución es para matrices simples y complementa la == y === una publicada anteriormente que solo es válida para los diccionarios.
fuente
array_diff - Calcula la diferencia de matrices
http://php.net/manual/en/function.array-diff.php
fuente
array_diff
No puedo decirte eso. Tratararray_diff([1, 2], [1, 2, 'hello'])
.Otro método para verificar la igualdad independientemente del orden de valor funciona mediante el uso de http://php.net/manual/en/function.array-intersect.php , de esta manera:
Aquí hay una versión que también funciona con matrices multidimensionales usando http://php.net/manual/en/function.array-uintersect.php :
fuente
fuente
Una forma: (implementando 'considerado igual' para http://tools.ietf.org/html/rfc6902#section-4.6 )
De esta forma, se permiten matrices asociativas cuyos miembros están ordenados de manera diferente, por ejemplo, se considerarían iguales en todos los idiomas excepto php :)
fuente
$a[$key] = rksort($a[$key]);
Problema de sintaxis en sus matrices
fuente
Aquí está el ejemplo de cómo comparar las matrices y obtener lo que es diferente entre ellas.
Resultado:
fuente
Utilice la función php array_diff (array1, array2);
Devolverá la diferencia entre las matrices. Si está vacío, entonces son iguales.
ejemplo:
Ejemplo 2
fuente
(count(array_diff($a1, $a2)) + count(array_diff($a2, $a1))) === 0
para probar si las matrices son "iguales"Si desea verificar matrices no asociativas, esta es la solución:
fuente