Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * @author Eugene Serkin <jserkin@gmail.com>
- * @version $Id$
- */
- class ArrayDividingTest extends PHPUnit_Framework_TestCase
- {
- /**
- * @dataProvider dataProvider
- */
- public function testDividingAlgorithm( array $input, array $expected )
- {
- $this->assertEquals( $this->transformation( $input[0] ), $expected[0] );
- }
- public function dataProvider()
- {
- return array(
- // First run
- array(
- array(
- array( 'a', 'b', 'c', )
- ),
- array(
- array(
- array( 'a', 'b', 'c', )
- )
- ),
- ),
- // Second run
- array(
- array(
- array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', )
- ),
- array(
- array(
- array( 'a', 'd', 'f' ),
- array( 'b', 'e', 'g' ),
- array( 'c', '', '' )
- )
- ),
- ),
- // Third run
- array(
- array(
- array(
- 'a', 'b', 'c', 'd',
- 'e', 'f', 'g', 'h',
- 'i', 'j', 'k', 'l',
- )
- ),
- array(
- array(
- array( 'a', 'e', 'i', ),
- array( 'b', 'f', 'j', ),
- array( 'c', 'g', 'k', ),
- array( 'd', 'h', 'l', )
- )
- ),
- ),
- // Fourth run
- array(
- array(
- array(
- 'a', 'b',
- )
- ),
- array(
- array(
- array( 'a', 'b', '', ),
- )
- ),
- ),
- // Fifth run
- array(
- array(
- array(
- 'a',
- )
- ),
- array(
- array(
- array( 'a', '', '', ),
- )
- ),
- ),
- // Sixth run
- array(
- array(
- array(
- 'a', 'b', 'c',
- 'd', 'e',
- )
- ),
- array(
- array(
- array( 'a', 'c', 'e', ),
- array( 'b', 'd', '', ),
- )
- ),
- ),
- // Seventh run
- array(
- array(
- array(
- 'a', 'b', 'd', 'e', 'f',
- 'g', 'h', 'i', 'j', 'k', 'l'
- )
- ),
- array(
- array(
- array( 'a', 'f', 'j', ),
- array( 'b', 'g', 'k', ),
- array( 'd', 'h', 'l', ),
- array( 'e', 'i', '', ),
- )
- ),
- ),
- // Eighth run
- array(
- array(
- array(
- 'a', 'b', 'g', 'h',
- )
- ),
- array(
- array(
- array( 'a', 'g', 'h', ),
- array( 'b', '', '', ),
- )
- ),
- ),
- // Nine run
- array(
- array(
- array(
- 'a', 'b', 'c', 'd', 'e', 'f',
- )
- ),
- array(
- array(
- array( 'a', 'c', 'e', ),
- array( 'b', 'd', 'f', ),
- )
- ),
- ),
- );
- }
- /**
- * @param array $toTransform
- * @param int $columnsMax
- * @return array
- */
- private function transformation( array $toTransform, $columnsMax = 3 )
- {
- // First divide array as you need
- $listlen = count( $toTransform );
- $partlen = floor( $listlen / $columnsMax );
- $partrem = $listlen % $columnsMax;
- $partition = array();
- $mark = 0;
- for ( $px = 0; $px < $columnsMax; $px++ )
- {
- $incr = ( $px < $partrem ) ? $partlen + 1 : $partlen;
- $partition[ $px ] = array_slice( $toTransform, $mark, $incr );
- $mark += $incr;
- }
- // Secondly fill empty slots for easy template use
- $result = array();
- for ( $i = 0; $i < count( $partition[0] ); $i++ )
- {
- $tmp = array();
- foreach ( $partition as $column )
- {
- if ( isset( $column[ $i ] ) )
- {
- $tmp[] = $column[ $i ];
- }
- else
- {
- $tmp[] = '';
- }
- }
- $result[] = $tmp;
- }
- return $result;
- }
- }
Add Comment
Please, Sign In to add comment