Как найти различия массивов c подмассивами на php, сравнить массивы

02.12.2021

Если стоит задача сравнить два массива и найти их различия, но внутри массивов есть подмассивы то простыми функциями типа array_diff не обойтись, нам понадобится функция с callback-ом. Я использовал array_udiff_assoc.

1) в функции val_compare_func можно использовать нестрогое сравнение, если нет такой необходимости

2) в моём примере сравниваются только одномерные массивы. Для многомерных нужно использовать более сложную логику, скорее всего с рекурсией

Ниже пример как найти различия двух массивов на php.

$updateProps = array_udiff_assoc($arr1, $arr2, "val_compare_func");

public function val_compare_func($a, $b)
{
    if(is_array($a) && is_array($b)) {

        if(count($a) != count($b))
            return -1;

        foreach($a as $aKey => $aVal){

            if($aVal === $b[$aKey])
                continue;
            else
                return -1;
        }

        return 0;
    }

    if ($a === $b) {
        return 0;
    }

    return ($a > $b)? 1:-1;
}

Если будет необходимость могу попробовать переписать эту проверку с рекурсией для массивов.


Возврат к списку