diff --git a/core/ArrayLib.php b/core/ArrayLib.php index 361b022ff..eb7d4b2ec 100755 --- a/core/ArrayLib.php +++ b/core/ArrayLib.php @@ -5,15 +5,54 @@ * @subpackage misc */ class ArrayLib extends Object { + + /** + * Inverses the first and second level keys of an associative + * array, keying the result by the second level, and combines + * all first level entries within them. + * + * Before: + * + * array( + * 'row1' => array( + * 'col1' =>'val1', + * 'col2' => 'val2' + * ), + * 'row2' => array( + * 'col1' => 'val3', + * 'col2' => 'val4' + * ) + * ) + * + * + * After: + * + * array( + * 'col1' => array( + * 'row1' => 'val1', + * 'row2' => 'val3', + * ), + * 'col2' => array( + * 'row1' => 'val2', + * 'row2' => 'val4', + * ), + * ) + * + * + * @param array $arr + * @return array + */ static function invert($arr) { - if (! $arr) return false; + if(!$arr) return false; + $result = array(); foreach($arr as $columnName => $column) { foreach($column as $rowName => $cell) { - $output[$rowName][$columnName] = $cell; + $result[$rowName][$columnName] = $cell; } } - return $output; + + return $result; } /** diff --git a/tests/ArrayLibTest.php b/tests/ArrayLibTest.php new file mode 100644 index 000000000..4839e4e0e --- /dev/null +++ b/tests/ArrayLibTest.php @@ -0,0 +1,33 @@ + array( + 'col1' =>'val1', + 'col2' => 'val2' + ), + 'row2' => array( + 'col1' => 'val3', + 'col2' => 'val4' + ) + ); + + $this->assertEquals( + ArrayLib::invert($arr), + array( + 'col1' => array( + 'row1' => 'val1', + 'row2' => 'val3', + ), + 'col2' => array( + 'row1' => 'val2', + 'row2' => 'val4', + ), + ) + ); + } +} \ No newline at end of file