Я хотел бы проверить, равны ли два массива. Я имею в виду: тот же размер, тот же индекс, те же значения. Как я могу это сделать?
Использование, !==
как предложено пользователем, я ожидаю, что следующее напечатало бы ввод, если хотя бы один элемент в массиве (ах) отличается, но на самом деле это не так.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
=
слишком много, это должно быть!==
или!=
['a'] == [0]
естьtrue
. Ну, это всего лишь PHP.Ответы:
Смотрите Операторы Массива .
РЕДАКТИРОВАТЬ
Оператор неравенства - это, в
!=
то время как неединичный оператор!==
должен соответствовать оператору равенства==
и тождественному оператору===
.источник
array_values($a)==array_values($b)
... Другая обычная проблема связана с уникальными значениями, поэтому помните, что существуютarray_unique()
.==
работает независимо от порядка только для типичных словарей типа[1 => 'a', 2 => 'b']
. Для например[1 => 'a', 2 => 'b'] == [2 => 'b', 1 => 'a']
. Для индексированных массивов вроде['a', 'b']
==
не работает, как указано. Для например['a', 'b'] != ['b', 'a']
.['a', 'b']
это массив[0 => 'a', 1 => 'b']
, а['b', 'a']
это массив[0 => 'b', 1 => 'a']
. Вот почему у них нет тех же пар ключ / значение, как указано в моем ответе, и поэтому==
между ними не работает.По этой странице .
ПРИМЕЧАНИЕ . Принятый ответ работает для ассоциативных массивов, но не работает должным образом с индексированными массивами (поясняется ниже). Если вы хотите сравнить любой из них, используйте это решение. Кроме того, эта функция может не работать с многомерными массивами (из-за природы функции array_diff).
Тестирование двух индексированных массивов, элементы которых находятся в разном порядке, с использованием
$a == $b
или$a === $b
неудачей, например:Это потому, что выше означает:
array(0 => "x", 1 => "y")
противarray(0 => "y", 1 => "x")
.Чтобы решить эту проблему, используйте:
Добавлено сравнение размеров массивов (предложено super_ton), так как это может улучшить скорость.
источник
array_diff
можно было бы ускорить сравнение. Я добавлю это. Спасибо$a = [1, 2, 2]; $b = [2, 1, 1];
и он вернулсяtrue
, но два массива, очевидно, не совпадают.Попробуй сериализовать. Это также проверит вложенные подмассивы.
источник
Краткое решение, которое работает даже с массивами, ключи которых даны в другом порядке:
источник
Сравните их как другие значения:
Вы можете прочитать обо всех операторах массива здесь: http://php.net/manual/en/language.operators.array.php. Например, обратите внимание, что
===
также проверяется, что типы и порядок элементов в массивах одинаковы.источник
===
зависимости от желаемого поведения.!===
не будет работать, потому что это синтаксическая ошибка. Правильный путь!==
(не три "равных" символа)источник
Из моего pov лучше использовать array_diff, чем array_intersect, потому что при проверках такого типа возвращаемые различия обычно меньше, чем сходства, поэтому преобразование bool требует меньше памяти.
Редактировать Обратите внимание, что это решение предназначено для простых массивов и дополняет опубликованное выше == и ===, которое действительно только для словарей.
источник
array_diff - вычисляет разницу массивов
http://php.net/manual/en/function.array-diff.php
источник
array_diff
не могу тебе этого сказать. Попробуйarray_diff([1, 2], [1, 2, 'hello'])
.Другой метод проверки равенства независимо от порядка значений работает с использованием http://php.net/manual/en/function.array-intersect.php , например так:
Вот версия, которая работает также с многомерными массивами, используя http://php.net/manual/en/function.array-uintersect.php :
источник
источник
Один из способов: (реализация «считается равным» для http://tools.ietf.org/html/rfc6902#section-4.6 )
Этот способ позволяет ассоциативные массивы, члены которых упорядочены по-разному - например, они будут считаться равными на всех языках, кроме php :)
источник
$a[$key] = rksort($a[$key]);
Синтаксическая проблема в ваших массивах
источник
Вот пример, как сравнить с массивами и узнать, что отличается между ними.
Результат:
источник
Используйте функцию php array_diff (array1, array2);
Это вернет разницу между массивами. Если его пусто, то они равны.
пример:
Пример 2:
источник
(count(array_diff($a1, $a2)) + count(array_diff($a2, $a1))) === 0
чтобы проверить, равны ли массивыЕсли вы хотите проверить неассоциативные массивы, вот решение:
источник