Eu gostaria de verificar se duas matrizes são iguais. Quero dizer: mesmo tamanho, mesmo índice, mesmos valores. Como eu posso fazer isso?
Usando !==
como sugerido por um usuário, espero que o seguinte imprima enter se pelo menos um elemento na (s) matriz (s) for diferente, mas na verdade não.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
=
muito, deveria ser!==
ou!=
['a'] == [0]
étrue
. Bem, isso é apenas PHP.Respostas:
Consulte Operadores de matriz .
EDITAR
O operador de desigualdade é
!=
enquanto o operador de não identidade!==
deve corresponder ao operador de igualdade==
e ao operador de identidade===
.fonte
array_values($a)==array_values($b)
... Outro problema comum é sobre valores únicos, lembre-se de que existemarray_unique()
.==
funciona independentemente da ordem apenas para dicionários típicos como[1 => 'a', 2 => 'b']
. Por exemplo[1 => 'a', 2 => 'b'] == [2 => 'b', 1 => 'a']
. Para matrizes indexadas, como['a', 'b']
==
não funciona como indicado. Por exemplo['a', 'b'] != ['b', 'a']
.['a', 'b']
é uma matriz[0 => 'a', 1 => 'b']
, enquanto['b', 'a']
é uma matriz[0 => 'b', 1 => 'a']
. É por isso que eles não têm os mesmos pares de chave / valor conforme indicado na minha resposta e é por isso==
que não funciona entre eles.De acordo com esta página .
NOTA: A resposta aceita funciona para matrizes associativas, mas não funcionará conforme o esperado com matrizes indexadas (explicadas abaixo). Se você quiser comparar um deles, use esta solução. Além disso, essa função pode não funcionar com matrizes multidimensionais (devido à natureza da função array_diff).
Testando duas matrizes indexadas, cujos elementos estão em ordem diferente, usando
$a == $b
ou$a === $b
falham, por exemplo:Isso ocorre porque o acima significa:
array(0 => "x", 1 => "y")
vs.array(0 => "y", 1 => "x")
.Para resolver esse problema, use:
A comparação de tamanhos de array foi adicionada (sugerida por super_ton), pois pode melhorar a velocidade.
fonte
array_diff
poderia acelerar a comparação. Vou adicioná-lo. Obrigado$a = [1, 2, 2]; $b = [2, 1, 1];
e ele retornoutrue
, mas as duas matrizes obviamente não são as mesmas.Tente serializar. Isso também verificará as sub-matrizes aninhadas.
fonte
Solução curta que funciona mesmo com matrizes cujas chaves são fornecidas em ordem diferente:
fonte
Compare-os como outros valores:
Você pode ler sobre todos os operadores de matriz aqui: http://php.net/manual/en/language.operators.array.php Observe, por exemplo, que
===
também verifica se os tipos e a ordem dos elementos nas matrizes são os mesmos.fonte
===
dependendo do comportamento desejado.!===
não funcionará porque é um erro de sintaxe. A maneira correta é!==
(não três símbolos "iguais a")fonte
Do meu ponto de vista, é melhor usar array_diff do que array_intersect porque, com verificações dessa natureza, as diferenças retornadas geralmente são menores que as semelhanças, desta forma a conversão de bools consome menos memória.
Editar Observe que esta solução é para matrizes simples e complementa a == e === uma postada acima que é válida apenas para dicionários.
fonte
array_diff - Calcula a diferença de matrizes
http://php.net/manual/en/function.array-diff.php
fonte
array_diff
não posso te dizer isso. Tentearray_diff([1, 2], [1, 2, 'hello'])
.Outro método para verificar a igualdade, independentemente da ordem do valor, funciona usando http://php.net/manual/en/function.array-intersect.php , da seguinte forma:
Aqui está uma versão que também funciona com matrizes multidimensionais usando http://php.net/manual/en/function.array-uintersect.php :
fonte
fonte
Uma maneira: (implementando 'considerado igual' para http://tools.ietf.org/html/rfc6902#section-4.6 )
Dessa forma, as matrizes associativas cujos membros são ordenados de maneira diferente - por exemplo, seriam consideradas iguais em todos os idiomas, exceto no php :)
fonte
$a[$key] = rksort($a[$key]);
Problema de sintaxe em suas matrizes
fonte
Aqui está o exemplo de como comparar com matrizes e obter o que há de diferente entre elas.
Resultado:
fonte
Use a função php array_diff (array1, array2);
Retornará a diferença entre matrizes. Se estiver vazio, então eles são iguais.
exemplo:
Exemplo 2:
fonte
(count(array_diff($a1, $a2)) + count(array_diff($a2, $a1))) === 0
para testar se as matrizes são "iguais"Se você deseja verificar matrizes não associativas, aqui está a solução:
fonte