Проверьте, равны ли значения двух массивов в PHP
Сниппет
1) Сравнение массивов с использованием строгого равенства (===)
Два массива строго равны ($a === $b
), когда:
- у них одинаковые пары ключ/значение
- пары ключ/значение находятся в том же порядке
- все значения одного типа
2) Сравнение массивов с использованием свободного равенства (==)
Два массива "слабо" равны ($a == $b
) когда у них одинаковые пары ключ/значение
Примеры сравнения 1 и 2 массивов
<?php
$a = ['a', 'b'];
$b = ['a', 'b'];
var_dump($a == $b); // true
var_dump($a === $b); // true
$a = ['a', 'b'];
$b = [0 => 'a', 1 => 'b'];
var_dump($a == $b); // true
var_dump($a === $b); // true
Ассоциативные массивы:
<?php
$a = ['a', 'b', [ 'foo' => 'bar' ]];
$b = ['a', 'b', [ 'foo' => 'bar' ]];
var_dump($a == $b); // true
var_dump($a === $b); // true
$a = ['a', 'b', [ 'foo' => 'bar' ]];
$b = [0 => 'a', 1 => 'b', 3 => [ 'foo' => 'bar' ]];
var_dump($a == $b); // true
var_dump($a === $b); // true
<?php
$a = [0 => 'a', 1 => 'b', 2 => 'c'];
$b = [false => 'a', true => 'b', '2' => 'c'];
var_dump($a == $b); // true
var_dump($a === $b); // true
<?php
$a = ['a', 'b'];
$b = ['b', 'a'];
var_dump($a == $b); // false
var_dump($a === $b); // false
$a = [0 => 'a', 1 => 'b'];
$b = [0 => 'b', 1 => 'a'];
var_dump($a == $b); // false
var_dump($a === $b); // false
Ассоциативные массивы:
<?php
$a = [1 => 'a', 2 => 'b', [ 'foo' => 'bar' ]];
$b = [[ 'foo' => 'bar' ], 2 => 'b', 1 => 'a'];
var_dump($a == $b); // false
var_dump($a === $b); // false
$a = [1 => 'a', 2 => 'b', 3 => [ 'foo' => 'bar' ]];
$b = [0 => [ 'foo' => 'bar' ], 2 => 'b', 1 => 'a'];
var_dump($a == $b); // false
var_dump($a === $b); // false
<?php
$a = [1, 2, 3];
$b = ['1', 2, 3];
var_dump($a == $b); // true
var_dump($a === $b); // false
$a = [false, true];
$b = [0, 3];
var_dump($a == $b); // true
var_dump($a === $b); // false
<?php
$a = [1 => 'a', 2 => 'b'];
$b = [2 => 'b', 1 => 'a'];
var_dump($a == $b); // true
var_dump($a === $b); // false
Но с индексированными массивами это не будет работать должным образом
<?php
$a = [0 => 'a', 1 => 'b'];
$b = [0 => 'b', 1 => 'a'];
var_dump($a == $b); // false
var_dump($a === $b); // false
Чтобы решить эту проблему, используйте:
<?php
function arrayEqual($a, $b) {
return (
is_array($a)
&& is_array($b)
&& count($a) == count($b)
&& array_diff($a, $b) === array_diff($b, $a)
);
}
$a = [0 => 'a', 1 => 'b'];
$b = [0 => 'b', 1 => 'a'];
var_dump(arrayEqual($a, $b)); // true