这里有一个小班给你:
class ArrayDiffer
{
public static function recursiveDiff(array $firstArray, array $secondArray): array
{
$difference = [];
foreach ($firstArray as $key => $value) {
if (\array_key_exists($key, $secondArray)) {
if (\is_array($value)) {
$recursiveDiff = self::recursiveDiff($value, $secondArray[$key]);
if (\count($recursiveDiff)) {
$difference[$key] = $recursiveDiff;
}
} else {
if ($value != $secondArray[$key]) {
$difference[$key] = $value;
}
}
} else {
$difference[$key] = $value;
}
}
return $difference;
}
}
下面是一个测试,它演示了它的工作原理:
public function testDiff(): void
{
$arrayDiffer = new ArrayDiffer();
$firstArray = \json_decode(
'[{
"code": "video",
"type": "input",
"labels": {
"en": "Youtube video"
},
"required": false,
"purpose": "add",
"options": null
}]', true
);
$secondArray = \json_decode(
'[{
"code": "video",
"type": "input",
"labels": {
"pt": "VÃdeo Youtube"
},
"required": false,
"purpose": "add",
"options": null
}]', true
);
$this->assertEquals(
[
0 => [
'labels' => [
'en' => 'Youtube video',
],
],
],
$arrayDiffer::recursiveDiff($firstArray, $secondArray)
);
}