有时候需要将一个大数组按一定大小分块,那么可以实现这个功能,代码如下:
/**
* @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;
}
}