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