PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

array_combine> <array_change_key_case
Last updated: Fri, 02 May 2008

view this page in

array_chunk

(PHP 4 >= 4.2.0, PHP 5)

array_chunk — Împarte un tablou în mai multe tablouri

Descriere

array array_chunk ( array $input , int $size [, bool $preserve_keys ] )

array_chunk() împarte un tablou în mai multe tablouri, fiecare având cel mult size valori. Unul dintre tablourile returnate poate avea mai puţine valori la sfîrşit. Tablourile rezultate vor face parte dintr-un tablou multidimensional cu index numeric care începe de la zero.

Prin setarea parametrului opţional preserve_keys ca TRUE, PHP poate fi forţat să păstreze indecşii originali din tabloul iniţial. Dacă se specifică FALSE în fiecare tablou rezultat vor fi utilizaţi indecşi numerici noi pornind de la zero. Valoarea implicită este FALSE.

Example #1 Exempul de utilizare array_chunk()

$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
print_r(array_chunk($input_array, 2, TRUE));

Rezultatul va fi:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

    [2] => Array
        (
            [0] => e
        )

)
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [2] => c
            [3] => d
        )

    [2] => Array
        (
            [4] => e
        )

)



array_combine> <array_change_key_case
Last updated: Fri, 02 May 2008
 
add a note add a note User Contributed Notes
array_chunk
azspot at gmail dot com
08-May-2007 04:53
Tried to use an example below (#56022) for array_chunk_fixed that would "partition" or divide an array into a desired number of split lists -- a useful procedure for "chunking" up objects or text items into columns, or partitioning any type of data resource. However, there seems to be a flaw with array_chunk_fixed — for instance, try it with a nine item list and with four partitions. It results in 3 entries with 3 items, then a blank array.

So, here is the output of my own dabbling on the matter:

<?php

function partition( $list, $p ) {
   
$listlen = count( $list );
   
$partlen = floor( $listlen / $p );
   
$partrem = $listlen % $p;
   
$partition = array();
   
$mark = 0;
    for (
$px = 0; $px < $p; $px++) {
       
$incr = ($px < $partrem) ? $partlen + 1 : $partlen;
       
$partition[$px] = array_slice( $list, $mark, $incr );
       
$mark += $incr;
    }
    return
$partition;
}

$citylist = array( "Black Canyon City", "Chandler", "Flagstaff", "Gilbert", "Glendale", "Globe", "Mesa", "Miami",
                  
"Phoenix", "Peoria", "Prescott", "Scottsdale", "Sun City", "Surprise", "Tempe", "Tucson", "Wickenburg" );
print_r( partition( $citylist, 3 ) );

?>

Array
(
    [0] => Array
        (
            [0] => Black Canyon City
            [1] => Chandler
            [2] => Flagstaff
            [3] => Gilbert
            [4] => Glendale
            [5] => Globe
        )

    [1] => Array
        (
            [0] => Mesa
            [1] => Miami
            [2] => Phoenix
            [3] => Peoria
            [4] => Prescott
            [5] => Scottsdale
        )

    [2] => Array
        (
            [0] => Sun City
            [1] => Surprise
            [2] => Tempe
            [3] => Tucson
            [4] => Wickenburg
        )

)
21-Mar-2006 04:19
Here my array_chunk_values( ) with values distributed by lines (columns are balanced as much as possible) :

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

       
// The map
       
$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 ;
    }

   
header('Content-Type: text/plain') ;

   
$data = array_chunk_vertical(range(1, 31), 7) ;
    foreach (
$data as $row ) {
        foreach (
$row as $value ) {
           
printf('[%2s]', $value) ;
        }
        echo
"\r\n" ;
    }

   
/*
        Output :

        [ 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]
    */
?>
magick dit crow ot gmail dit com
16-Oct-2005 09:50
Mistake key did not do what I thought. A patch.

function array_bucket($array,$bucket_size)// bucket filter
{
    if (!is_array($array)) return false;
    $buckets=array_chunk($array,$bucket_size);// chop up array into bucket size units
    $I=0;
    foreach ($buckets as $bucket)
    {
        $new_array[$I++]=array_sum($bucket)/count($bucket);
    }
    return $new_array;// return new array
}
magick dit crow ot gmail dit com
15-Oct-2005 10:58
This function takes each few elements of an array and averages them together. It then places the averages in a new array. It is used to smooth out data. For example lets say you have a years worth of hit data to a site and you want to graph it by the week. Then use a bucket of 7 and graph the functions output.

function array_bucket($array, $bucket_size)  // bucket filter
{
    if (!is_array($array)) return false; // no empty arrays
    $buckets=array_chunk($array,$bucket_size);  // chop up array into bucket size units
    foreach ($buckets as $bucket) $new_array[key($buckets])=array_sum($bucket)/count($bucket);
    return $new_array;  // return new smooth array
}
webmaster at cafe-clope dot net
20-Aug-2005 04:27
based on the same syntax, useful about making columns :

<?php
function array_chunk_fixed($input, $num, $preserve_keys = FALSE) {
   
$count = count($input) ;
    if(
$count)
       
$input = array_chunk($input, ceil($count/$num), $preserve_keys) ;
   
$input = array_pad($input, $num, array()) ;
    return
$input ;
}

$array = array(1, 2, 3, 4, 5) ;
print_r(array_chunk($array, 2)) ;
print_r(array_chunk_fixed($array, 2)) ;
?>

---- array_chunk : fixed number of sub-items ----
Array(
    [0] => Array(
            [0] => 1
            [1] => 2
        )
    [1] => Array(
            [0] => 3
            [1] => 4
        )

    [2] => Array(
            [0] => 5
        )
)

---- array_chunk : fixed number of columns ----
Array(
    [0] => Array(
            [0] => 1
            [1] => 2
            [2] => 3
        )
    [1] => Array(
            [0] => 4
            [1] => 5
        )
)
berndt at michael - berndt dot de
22-Apr-2005 08:22
SplitAssoziativArray() without array_chunk()
http://www.michael-berndt.de/ie/tux/assoziativen_array_zerteilen.htm
berndt at www dot michael-berndt dot de
10-Apr-2005 08:11
split array without array_chunk()
http://www.michael-berndt.de/ie/tux/split_array.htm
phpm at nreynolds dot me dot uk
17-Dec-2004 04:21
array_chunk() is helpful when constructing tables with a known number of columns but an unknown number of values, such as a calendar month. Example:

<?php

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

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

?>

Outputs:

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

The other direction is possible too, with the aid of a function included at the bottom of this note. Changing this line:
  $rows = array_chunk($values, 7);

To this:
  $rows = array_chunk_vertical($values, 7);

Produces a vertical calendar with seven columns:

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

You can also specify that $size refers to the number of rows, not columns:
  $rows = array_chunk_vertical($values, 7, false, false);

Producing this:

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

The function:

<?php

function array_chunk_vertical($input, $size, $preserve_keys = false, $size_is_horizontal = true)
{
   
$chunks = array();
   
    if (
$size_is_horizontal) {
       
$chunk_count = ceil(count($input) / $size);
    } else {
       
$chunk_count = $size;
    }
   
    for (
$chunk_index = 0; $chunk_index < $chunk_count; $chunk_index++) {
       
$chunks[] = array();
    }

   
$chunk_index = 0;
    foreach (
$input as $key => $value)
    {
        if (
$preserve_keys) {
           
$chunks[$chunk_index][$key] = $value;
        } else {
           
$chunks[$chunk_index][] = $value;
        }
       
        if (++
$chunk_index == $chunk_count) {
           
$chunk_index = 0;
        }
    }
   
    return
$chunks;
}

?>
mick at vandermostvanspijk dot nl
07-Apr-2004 03:02
[Editors note: This function was based on a previous function by gphemsley at nospam users dot sourceforge.net]

For those of you that need array_chunk() for PHP < 4.2.0, this function should do the trick:

<?php
if (!function_exists('array_chunk')) {
    function
array_chunk( $input, $size, $preserve_keys = false) {
        @
reset( $input );
       
       
$i = $j = 0;

        while( @list(
$key, $value ) = @each( $input ) ) {
            if( !( isset(
$chunks[$i] ) ) ) {
              
$chunks[$i] = array();
            }

            if(
count( $chunks[$i] ) < $size ) {
                if(
$preserve_keys ) {
                   
$chunks[$i][$key] = $value;
                   
$j++;
                } else {
                   
$chunks[$i][] = $value;
                }
            } else {
               
$i++;

                if(
$preserve_keys ) {
                   
$chunks[$i][$key] = $value;
                   
$j++;
                } else {
                   
$j = 0;
                   
$chunks[$i][$j] = $value;
                }
            }
        }

        return
$chunks;
    }
}
?>

array_combine> <array_change_key_case
Last updated: Fri, 02 May 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites