Handy function to compare value changes between arrays, based on array_diff_assoc().
Valid for PHP 7.4+ due to the use of arrow functions as a shorthand, but may be "downgraded" as well.
<?php
function array_changes($amDataOld, $amDataNew)
{
$fnDiffGroup = fn ($sDiffKey) => [
'old' => ($amDataOld[$sDiffKey] ?? NULL),
'new' => ($amDataNew[$sDiffKey] ?? NULL),
];
$asDataOld = array_map('serialize', $amDataOld);
$asDataNew = array_map('serialize', $amDataNew);
$asDiffKeys = array_keys(
array_diff_assoc($asDataOld, $asDataNew)
+ array_diff_assoc($asDataNew, $asDataOld)
);
return array_combine($asDiffKeys, array_map($fnDiffGroup, $asDiffKeys));
}
$a1 = [
'SameValue' => 230.0,
'SameArray' => ['foo' => 'FOO', 'bar' => 'BAR'],
'DiffValue' => 48.25,
'DiffTypeSimple' => 100.1,
'DiffTypeComplex' => 27.8,
'DiffTypeArray' => ['foo' => 'FOO', 'bar' => 'BAR'],
];
$a2 = [
'SameValue' => 230.0,
'SameArray' => ['foo' => 'FOO', 'bar' => 'BAR'],
'DiffValue' => 41.5,
'DiffTypeSimple' => '100.1',
'DiffTypeComplex' => ['foo' => 'FOO', 'bar' => 'BAZ'],
'DiffTypeArray' => ['foo' => 'FOO', 'bar' => 'BAZ'],
];
var_dump(array_changes($a1, $a2));
?>