сравнить два PHP-массива по ключу - PullRequest
5 голосов
/ 06 июня 2011

Какой самый быстрый способ сравнения, если ключи двух массивов равны?

, например,

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 ]

16 голосов
/ 06 июня 2011

Используйте 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);
}
4 голосов
/ 06 июня 2011

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

OR

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

3 голосов
/ 06 июня 2011

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

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


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


var_dump( array_keys( $array1 ) === array_keys( $array2 ) );
...