сравните два массива 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() возвращает пустой массив...

Author: Alex, 2011-06-06

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);
}
 15
Author: meagar, 2011-06-06 13:34:42

Используйте array_keys, чтобы получить массив ключей, а затем используйте array_diff.

ИЛИ

Используйте array_diff_key напрямую.

 4
Author: Naveed, 2011-06-06 13:28:58

Как насчет использования === вместо этого? Вы знаете, оператор для равенства?

$array1 = array(
    'abc' => 46,
    'def' => 134,
    'xyz' => 34
);


$array2 = array(
    'abc' => 46,
    'def' => 134,
    'xyz' => 34,
);


var_dump( array_keys( $array1 ) === array_keys( $array2 ) );
 3
Author: Berry Langerak, 2011-06-06 13:43:41