Полное расхождение массивов по ключу в PHP

Функция array_diff_keys() не совсем так работает. Нужно чтобы результатом было полное расхождение. Т.е. все элементы из А которые отсутствуют в B и все элементы из B которые отсутствуют в А.

Т.е. так:

array_merge(array_diff_keys($a, $b), array_diff_keys($b, $a));

Есть ли проще варианты ?


Ответы (1 шт):

Автор решения: becouse

array_diff_keys эквивалент операции над множествами "разность"

A\B={x|(x in A) and (x non in B)}

Вы хотите операцию симметрической разности:

A delta B = {x|(x in A and x in B) and (x not in AB)}

Соответственно симметрическая разность так и реализуется:

A delta B=(A\B)+(B\A)
array_merge(array_diff_keys($a, $b), array_diff_keys($b, $a));

В PHP реализованы операции объединения (array_merge), пересечения (array_intersect) и разности (array_diff). Остальные операции над множествами реализуются через их композицию.

Если вы хотите получить только уникальные различия, то можно дополнительно обернуть в array_unique.

→ Ссылка