[MediaWiki-commits] [Gerrit] Implement wfArrayPlus2d which combines 2d arrays - change (mediawiki/core)
jenkins-bot has submitted this change and it was merged. Change subject: Implement wfArrayPlus2d which combines 2d arrays .. Implement wfArrayPlus2d which combines 2d arrays Moved the logic of ExtensionRegistrations array_plus_2d merge method out to it's own global function wfArrayPlus2d, so any other function in mediawiki core and it's extensions can use this method when they need to union a 2d array. Change-Id: I56afdf306e399a4a1505828ed76c60c1bfd033b6 --- M includes/GlobalFunctions.php M includes/registration/ExtensionRegistry.php A tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php 3 files changed, 120 insertions(+), 8 deletions(-) Approvals: Legoktm: Looks good to me, approved jenkins-bot: Verified diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 9d89633..b853d07 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -4273,3 +4273,28 @@ return true; } + +/** + * Merges two (possibly) 2 dimensional arrays into the target array ($baseArray). + * + * Values that exist in both values will be combined with += (all values of the array + * of $newValues will be added to the values of the array of $baseArray, while values, + * that exists in both, the value of $baseArray will be used). + * + * @param array $baseArray The array where you want to add the values of $newValues to + * @param array $newValues An array with new values + * @return array The combined array + * @since 1.26 + */ +function wfArrayPlus2d( array $baseArray, array $newValues ) { + // First merge items that are in both arrays + foreach ( $baseArray as $name => &$groupVal ) { + if ( isset( $newValues[$name] ) ) { + $groupVal += $newValues[$name]; + } + } + // Now add items that didn't exist yet + $baseArray += $newValues; + + return $baseArray; +} diff --git a/includes/registration/ExtensionRegistry.php b/includes/registration/ExtensionRegistry.php index b89518a..f838103 100644 --- a/includes/registration/ExtensionRegistry.php +++ b/includes/registration/ExtensionRegistry.php @@ -222,14 +222,7 @@ $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val ); break; case 'array_plus_2d': - // First merge items that are in both arrays - foreach ( $GLOBALS[$key] as $name => &$groupVal ) { - if ( isset( $val[$name] ) ) { - $groupVal += $val[$name]; - } - } - // Now add items that didn't exist yet - $GLOBALS[$key] += $val; + $GLOBALS[$key] = wfArrayPlus2d( $GLOBALS[$key], $val ); break; case 'array_plus': $GLOBALS[$key] = $val + $GLOBALS[$key]; diff --git a/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php new file mode 100644 index 000..88875bb --- /dev/null +++ b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php @@ -0,0 +1,94 @@ +assertEquals( + $expected, + wfArrayPlus2d( $baseArray, $newValues ), + $testName + ); + } + + /** +* Provider for testing wfArrayPlus2d +* +* @return array +*/ + public static function provideArrays() { + return array( + // target array, new values array, expected result + array( + array( 0 => '1dArray' ), + array( 1 => '1dArray' ), + array( 0 => '1dArray', 1 => '1dArray' ), + "Test simple union of two arrays with different keys", + ), + array( + array( + 0 => array( 0 => '2dArray' ), + ), + array( + 0 => array( 1 => '2dArray' ), + ), + array( + 0 => array( 0 => '2dArray', 1 => '2dArray' ), + ), + "Test union of 2d arrays with different keys in the value array", + ), + array( +
[MediaWiki-commits] [Gerrit] Implement wfArrayPlus2d which combines 2d arrays - change (mediawiki/core)
Florianschmidtwelzow has uploaded a new change for review. https://gerrit.wikimedia.org/r/234325 Change subject: Implement wfArrayPlus2d which combines 2d arrays .. Implement wfArrayPlus2d which combines 2d arrays Moved the logic of ExtensionRegistrations array_plus_2d merge method out to it's own global function wfArrayPlus2d, so any other function in mediawiki core and it's extensions can use this method when they need to union a 2d array. Change-Id: I56afdf306e399a4a1505828ed76c60c1bfd033b6 --- M includes/GlobalFunctions.php M includes/registration/ExtensionRegistry.php A tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php 3 files changed, 132 insertions(+), 8 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/25/234325/1 diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 9d89633..b853d07 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -4273,3 +4273,28 @@ return true; } + +/** + * Merges two (possibly) 2 dimensional arrays into the target array ($baseArray). + * + * Values that exist in both values will be combined with += (all values of the array + * of $newValues will be added to the values of the array of $baseArray, while values, + * that exists in both, the value of $baseArray will be used). + * + * @param array $baseArray The array where you want to add the values of $newValues to + * @param array $newValues An array with new values + * @return array The combined array + * @since 1.26 + */ +function wfArrayPlus2d( array $baseArray, array $newValues ) { + // First merge items that are in both arrays + foreach ( $baseArray as $name = $groupVal ) { + if ( isset( $newValues[$name] ) ) { + $groupVal += $newValues[$name]; + } + } + // Now add items that didn't exist yet + $baseArray += $newValues; + + return $baseArray; +} diff --git a/includes/registration/ExtensionRegistry.php b/includes/registration/ExtensionRegistry.php index b89518a..f838103 100644 --- a/includes/registration/ExtensionRegistry.php +++ b/includes/registration/ExtensionRegistry.php @@ -222,14 +222,7 @@ $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val ); break; case 'array_plus_2d': - // First merge items that are in both arrays - foreach ( $GLOBALS[$key] as $name = $groupVal ) { - if ( isset( $val[$name] ) ) { - $groupVal += $val[$name]; - } - } - // Now add items that didn't exist yet - $GLOBALS[$key] += $val; + $GLOBALS[$key] = wfArrayPlus2d( $GLOBALS[$key], $val ); break; case 'array_plus': $GLOBALS[$key] = $val + $GLOBALS[$key]; diff --git a/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php new file mode 100644 index 000..309fc3f --- /dev/null +++ b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php @@ -0,0 +1,106 @@ +?php +/** + * @group GlobalFunctions + * @covers ::wfArrayPlus2d + */ +class WfArrayPlus2dTest extends MediaWikiTestCase { + /** +* @dataProvider provideURLParts +*/ + public function testWfArrayPlus2d( $baseArray, $newValues, $expected, $testName ) { + $this-assertEquals( + $expected, + wfArrayPlus2d( $baseArray, $newValues ), + $testName + ); + } + + /** +* Provider of URL parts for testing wfAssembleUrl() +* +* @return array +*/ + public static function provideURLParts() { + return array( + // target array, new values array, expected result + array( + array( 0 = '1dArray' ), + array( 1 = '1dArray' ), + array( 0 = '1dArray', 1 = '1dArray' ), + Test simple union of two arrays with different keys, + ), + array( + array( + 0 = array( 0 = '2dArray' ), + ), + array( + 0 = array( 1 = '2dArray' ), +