сравните два массива PHP по ключу
Каков самый быстрый способ сравнения, если ключи двух массивов равны?
Например,
array1: array2:
'abc' => 46, 'abc' => 46,
'def' => 134, 'def' => 134,
'xyz' => 34, 'xyz' => 34,
В этом случае результат должен быть ИСТИННЫМ (те же ключи)
И:
array1: array2:
'abc' => 46, 'abc' => 46,
'def' => 134, 'def' => 134,
'qwe' => 34, 'xyz' => 34,
'xyz' => 34,
Результат должен быть ЛОЖНЫМ (некоторые ключи отличаются)
Array_diff_key() возвращает пустой массив...
3 answers
Использовать array_diff_key
, вот для чего это нужно. Как вы сказали, он возвращает пустой массив; это то, что он должен делать.
Учитывая array_diff_key($array1, $array2)
, он вернет пустой массив, если все ключи array1 существуют в array2. Чтобы убедиться, что массивы равны, вам нужно убедиться, что все ключи array2 существуют в array1. Если любой из вызовов возвращает непустой массив, вы знаете, что ваши ключи массива не равны:
function keys_are_equal($array1, $array2) {
return !array_diff_key($array1, $array2) && !array_diff_key($array2, $array1);
}
Используйте array_keys, чтобы получить массив ключей, а затем используйте array_diff.
ИЛИ
Используйте array_diff_key напрямую.
Как насчет использования === вместо этого? Вы знаете, оператор для равенства?
$array1 = array(
'abc' => 46,
'def' => 134,
'xyz' => 34
);
$array2 = array(
'abc' => 46,
'def' => 134,
'xyz' => 34,
);
var_dump( array_keys( $array1 ) === array_keys( $array2 ) );