<?php
// your code goes here
class DiffGenerator
{
/*
* @param stdClass $incoming
* @param stdClass|null $outgoing
* @return array|null
*/
public function diff
(stdClass
$incoming, ?stdClass
$outgoing): ?
array
{
if ($outgoing === null) {
return null;
}
return $this->objectDiff($incoming, $outgoing);
}
/**
* @param stdClass $obj1
* @param stdClass $obj2
* @return array
*/
private function objectDiff
(stdClass
$obj1, stdClass
$obj2):
array
{
return $this->arrayDiff($a1, $a2);
}
/**
* @param array $a1
* @param array $a2
* @return array
*/
{
$r = [];
foreach ($a1 as $k => $v) {
if ($v instanceof stdClass) {
$rad = $this->objectDiff($v, $a2[$k]);
if (count($rad)) { $r[$k] =
$rad;
}
$rad = $this->arrayDiff($v, $a2[$k]);
if (count($rad)) { $r[$k] =
$rad;
}
// required to avoid rounding errors due to the
// conversion from string representation to double
if (abs($v -
$a2[$k]) >
0.000000000001) {
$r[$k] =
array($v,
$a2[$k]);
}
} else {
if ($v != $a2[$k]) {
$r[$k] =
array($v,
$a2[$k]);
}
}
} else {
$r[$k] =
array($v,
null);
}
}
return $r;
}
}
$compare = new DiffGenerator();
$incoming =
(object
) array('entry_type' =>
'AB');
$outgoing =
(object
) array('entry_type' =>
'F');
$diff = $compare->diff($incoming, $outgoing);
?>