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