Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: netjunky on Oct 25th, 2011  |  syntax: PHP  |  size: 3.14 KB  |  views: 27  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2. /**
  3.  * @author  Eugene Serkin <jserkin@gmail.com>
  4.  * @version $Id$
  5.  */
  6.  
  7. class ArrayDividingTest extends PHPUnit_Framework_TestCase
  8. {
  9.         /**
  10.          * @dataProvider dataProvider
  11.          */
  12.         public function testDividingAlgorithm( array $input, array $expected )
  13.         {
  14.                 $this->assertEquals( $this->transformation( $input[0] ), $expected[0] );
  15.         }
  16.  
  17.         public function dataProvider()
  18.         {
  19.                 return array(
  20.                         // First run
  21.                         array(
  22.                                 array(
  23.                                         array( 'a', 'b', 'c', )
  24.                                 ),
  25.                                 array(
  26.                                         array(
  27.                                                 array( 'a', 'b', 'c', )
  28.                                         )
  29.                                 ),
  30.                         ),
  31.                         // Second run
  32.                         array(
  33.                                 array(
  34.                                         array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', )
  35.                                 ),
  36.                                 array(
  37.                                         array(
  38.                                                 array( 'a', 'd', 'f' ),
  39.                                                 array( 'b', 'e', 'g' ),
  40.                                                 array( 'c', '', '' )
  41.                                         )
  42.                                 ),
  43.                         ),
  44.                         // Third run
  45.                         array(
  46.                                 array(
  47.                                         array(
  48.                                                 'a', 'b', 'c', 'd',
  49.                                                 'e', 'f', 'g', 'h',
  50.                                                 'i', 'j', 'k', 'l',
  51.                                         )
  52.                                 ),
  53.                                 array(
  54.                                         array(
  55.                                                 array( 'a', 'e', 'i', ),
  56.                                                 array( 'b', 'f', 'j', ),
  57.                                                 array( 'c', 'g', 'k', ),
  58.                                                 array( 'd', 'h', 'l', )
  59.                                         )
  60.                                 ),
  61.                         ),
  62.                         // Fourth run
  63.                         array(
  64.                                 array(
  65.                                         array(
  66.                                                 'a', 'b',
  67.                                         )
  68.                                 ),
  69.                                 array(
  70.                                         array(
  71.                                                 array( 'a', 'b', '', ),
  72.                                         )
  73.                                 ),
  74.                         ),
  75.                         // Fifth run
  76.                         array(
  77.                                 array(
  78.                                         array(
  79.                                                 'a',
  80.                                         )
  81.                                 ),
  82.                                 array(
  83.                                         array(
  84.                                                 array( 'a', '', '', ),
  85.                                         )
  86.                                 ),
  87.                         ),
  88.                         // Sixth run
  89.                         array(
  90.                                 array(
  91.                                         array(
  92.                                                 'a', 'b', 'c',
  93.                                                 'd', 'e',
  94.                                         )
  95.                                 ),
  96.                                 array(
  97.                                         array(
  98.                                                 array( 'a', 'c', 'e', ),
  99.                                                 array( 'b', 'd', '', ),
  100.                                         )
  101.                                 ),
  102.                         ),
  103.                         // Seventh run
  104.                         array(
  105.                                 array(
  106.                                         array(
  107.                                                 'a', 'b', 'd', 'e', 'f',
  108.                                                 'g', 'h', 'i', 'j', 'k', 'l'
  109.                                         )
  110.                                 ),
  111.                                 array(
  112.                                         array(
  113.                                                 array( 'a', 'f', 'j', ),
  114.                                                 array( 'b', 'g', 'k', ),
  115.                                                 array( 'd', 'h', 'l', ),
  116.                                                 array( 'e', 'i', '', ),
  117.                                         )
  118.                                 ),
  119.                         ),
  120.                         // Eighth run
  121.                         array(
  122.                                 array(
  123.                                         array(
  124.                                                 'a', 'b', 'g', 'h',
  125.                                         )
  126.                                 ),
  127.                                 array(
  128.                                         array(
  129.                                                 array( 'a', 'g', 'h', ),
  130.                                                 array( 'b', '', '', ),
  131.                                         )
  132.                                 ),
  133.                         ),
  134.                         // Nine run
  135.                         array(
  136.                                 array(
  137.                                         array(
  138.                                                 'a', 'b', 'c', 'd', 'e', 'f',
  139.                                         )
  140.                                 ),
  141.                                 array(
  142.                                         array(
  143.                                                 array( 'a', 'c', 'e', ),
  144.                                                 array( 'b', 'd', 'f', ),
  145.                                         )
  146.                                 ),
  147.                         ),
  148.                 );
  149.         }
  150.  
  151.         /**
  152.          * @param array $toTransform
  153.          * @param int $columnsMax
  154.          * @return array
  155.          */
  156.         private function transformation( array $toTransform, $columnsMax = 3 )
  157.         {
  158.                 // First divide array as you need
  159.                 $listlen   = count( $toTransform );
  160.                 $partlen   = floor( $listlen / $columnsMax );
  161.                 $partrem   = $listlen % $columnsMax;
  162.                 $partition = array();
  163.                 $mark      = 0;
  164.  
  165.                 for ( $px = 0; $px < $columnsMax; $px++ )
  166.                 {
  167.                         $incr             = ( $px < $partrem ) ? $partlen + 1 : $partlen;
  168.                         $partition[ $px ] = array_slice( $toTransform, $mark, $incr );
  169.                         $mark             += $incr;
  170.                 }
  171.  
  172.                 // Secondly fill empty slots for easy template use
  173.                 $result = array();
  174.  
  175.                 for ( $i = 0; $i < count( $partition[0] ); $i++ )
  176.                 {
  177.                         $tmp = array();
  178.  
  179.                         foreach ( $partition as $column )
  180.                         {
  181.                                 if ( isset( $column[ $i ] ) )
  182.                                 {
  183.                                         $tmp[] = $column[ $i ];
  184.                                 }
  185.                                 else
  186.                                 {
  187.                                         $tmp[] = '';
  188.                                 }
  189.                         }
  190.  
  191.                         $result[] = $tmp;
  192.                 }
  193.  
  194.                 return $result;
  195.         }
  196. }
clone this paste RAW Paste Data