array array_chunk ( array $input , int $size [, bool $preserve_keys ] )
(PHP 4 >= 4.2.0, PHP 5)

배열을 size 크기만큼 조각으로 나누어 주며, preserve_keys 인자를 true로 설정하면 나누어진 조각인 키의 연속성을 가지게 합니다.

<?php
 // 배열을 2조각으로 나눕니다.
 $input_array = array('a', 'b', 'c', 'd', 'e');
 print_r(array_chunk($input_array, 2));
 /*
 결과:
 Array
 (
    [0] => Array
        (
            [0] => a
            [1] => b
        )
    [1] => Array
        (
            [0] => c
            [1] => d
        )
    [2] => Array
        (
            [0] => e
        )
 )
 */


 // 배열을 2조각으로 나누되, 키가 연속되게 합니다.
 $input_array = array('a', 'b', 'c', 'd', 'e');
 print_r(array_chunk($input_array, 2, true));
 /*
 결과:
 Array
 (
    [0] => Array
        (
            [0] => a
            [1] => b
        )
    [1] => Array
        (
            [2] => c
            [3] => d
        )
    [2] => Array
        (
            [4] => e
        )
 )
 */
 ?>

<?php
 function array_chunk_vertical($data, $columns) {
      $n = count($data) ;
      $per_column = floor($n / $columns) ;
      $rest = $n % $columns ;

      $per_columns = array( ) ;
      for ( $i = 0 ; $i < $columns ; $i++ ) {
            $per_columns[$i] = $per_column + ($i < $rest ? 1 : 0) ;
       }
       $tabular = array( ) ;
       foreach ( $per_columns as $rows ) {
            for ( $i = 0 ; $i < $rows ; $i++ ) {
                 $tabular[$i][ ] = array_shift($data) ;
            }
       }
       return $tabular ;
 }
 $data = array_chunk_vertical(range(1, 31), 7) ;
 foreach ( $data as $row ) {
      foreach ( $row as $value ) {
           printf('[%2s]', $value) ;
      }
      echo "\r\n" ;
 }
 /*
 결과:
 [ 1][ 6][11][16][20][24][28]
 [ 2][ 7][12][17][21][25][29]
 [ 3][ 8][13][18][22][26][30]
 [ 4][ 9][14][19][23][27][31]
 [ 5][10][15]
 */
 ?> 

<?php
 $values = range(1, 31);
 $rows = array_chunk($values, 7);

 echo "<table>\n";
 foreach ($rows as $row) {
      echo "<tr>\n";
      foreach ($row as $value) {
           echo "<td>" . $value . "</td>\n";
      }
      echo "</tr>\n";
 }
 echo "</table>\n";

 /*
 결과:
  1  2  3  4  5  6  7 
  8  9 10 11 12 13 14 
 15 16 17 18 19 20 21 
 22 23 24 25 26 27 28 
 29 30 31 
 */
 ?> 

0 댓글