From 211edf64669ed221d1103103a9a5281a4301b57b Mon Sep 17 00:00:00 2001 From: Markus Klein <markus.klein@typo3.org> Date: Tue, 27 Feb 2018 15:57:58 +0100 Subject: [PATCH] [BUGFIX] Correctly handle identical arrays in arrayDiffAssocRecursive Add a new test to make sure that identical input arrays also deliver an empty result as difference. Resolves: #84067 Releases: master, 8.7, 7.6 Change-Id: Ia16ca9560094c4ae42eb69cac9e09cd4bef7dc4e Reviewed-on: https://review.typo3.org/55925 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Markus Klein <markus.klein@typo3.org> Tested-by: Markus Klein <markus.klein@typo3.org> --- .../core/Classes/Utility/ArrayUtility.php | 5 +++- .../Tests/Unit/Utility/ArrayUtilityTest.php | 30 +++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/typo3/sysext/core/Classes/Utility/ArrayUtility.php b/typo3/sysext/core/Classes/Utility/ArrayUtility.php index 3273d9a76e95..be2542231f2c 100644 --- a/typo3/sysext/core/Classes/Utility/ArrayUtility.php +++ b/typo3/sysext/core/Classes/Utility/ArrayUtility.php @@ -674,7 +674,10 @@ class ArrayUtility $differenceArray[$key] = $value; } elseif (is_array($value)) { if (is_array($array2[$key])) { - $differenceArray[$key] = self::arrayDiffAssocRecursive($value, $array2[$key]); + $recursiveResult = self::arrayDiffAssocRecursive($value, $array2[$key]); + if (!empty($recursiveResult)) { + $differenceArray[$key] = $recursiveResult; + } } } } diff --git a/typo3/sysext/core/Tests/Unit/Utility/ArrayUtilityTest.php b/typo3/sysext/core/Tests/Unit/Utility/ArrayUtilityTest.php index fc6528e7bf8b..af1ef6052e7e 100644 --- a/typo3/sysext/core/Tests/Unit/Utility/ArrayUtilityTest.php +++ b/typo3/sysext/core/Tests/Unit/Utility/ArrayUtilityTest.php @@ -2085,7 +2085,7 @@ class ArrayUtilityTest extends UnitTestCase ] ]; $array2 = [ - 'key1' => 'value1', + 'key1' => 'valueDoesNotMatter', 'key2' => [ 'key21' => 'value21', 'key23' => [ @@ -2121,7 +2121,7 @@ class ArrayUtilityTest extends UnitTestCase $array2 = [ 'key1' => 'value1', 'key2' => [ - 'key21' => 'value21' + 'key21' => 'valueDoesNotMatter' ] ]; $expectedResult = [ @@ -2131,6 +2131,32 @@ class ArrayUtilityTest extends UnitTestCase $this->assertEquals($expectedResult, $actualResult); } + /** + * @test + */ + public function arrayDiffAssocRecursiveReturnsEmptyIfEqual() + { + $array1 = [ + 'key1' => [ + 'key11' => 'value11', + 'key12' => 'value12' + ], + 'key2' => 'value2', + 'key3' => 'value3' + ]; + $array2 = [ + 'key1' => [ + 'key11' => 'valueDoesNotMatter', + 'key12' => 'value12' + ], + 'key2' => 'value2', + 'key3' => 'value3' + ]; + $expectedResult = []; + $actualResult = ArrayUtility::arrayDiffAssocRecursive($array1, $array2); + $this->assertEquals($expectedResult, $actualResult); + } + ////////////////////////////////////// // Tests concerning naturalKeySortRecursive ////////////////////////////////////// -- GitLab