【php】php实现数组分块

有时候需要将一个大数组按一定大小分块,那么可以实现这个功能,代码如下:

/**
 * @param array $arr
 * @param int $size <p>
 * @param bool $preserve_keys [optional] <p>
 * @author  <1123258953@qq.com>
 */
function _array_chunk($arr,$size,$preserve_keys=true){
    if(empty($arr)){
       return $arr;
    }
    $count = count($arr) % $size == 0 ? count($arr) / $size : ceil(count($arr) / $size);

    for ($i = 0; $i < $count; $i++) {array_chunk();
        //$index = $i * $size;
        if(!isset($chunks_arr[$i])){
            $chunks_arr[$i] = [];
        }
        $j=0;
        foreach ($arr as $k=>$v){
            if($j<$size){
                if($preserve_keys){
                    $chunks_arr[$i][$k] = $v;
                }else{
                    $chunks_arr[$i][] = $v;
                }
                unset($arr[$k]);
            }
            $j++;
        }
    }
    return $chunks_arr;
}

 

 测试

$arr = range(1, 15);
print_r(_array_chunk($arr,6,1));

 输出

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => 6
        )

    [1] => Array
        (
            [6] => 7
            [7] => 8
            [8] => 9
            [9] => 10
            [10] => 11
            [11] => 12
        )

    [2] => Array
        (
            [12] => 13
            [13] => 14
            [14] => 15
        )

)

 其实php有内置的数组可以实现该功能 就是 array_chunk    地址:http://php.net/manual/zh/function.array-chunk.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; 
    } 
} 

 

posted @ 2018-02-09 15:26  songguojun  阅读(1325)  评论(0编辑  收藏  举报