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;
}
Если будет необходимость могу попробовать переписать эту проверку с рекурсией для массивов.