A breakdown by groups with excess:function array_chunk_greedy($arr, $count){ $arr = array_chunk($arr, $count); if(($k = count($arr)-1) > 0){ if(count($arr[$k]) < $count){ $arr[$k-1] = array_merge($arr[$k-1], $arr[$k]); unset($arr[$k]); } } return $arr; }$arr = range(1, 13);$arr = array_chunk_greedy($arr, 4);print_r($arr);[1,2,3,4,5,6,7,8,9,10,11,12,13] —> [1,2,3,4] [5,6,7,8] [9,10,11,12,13]More examples:[1,2,3,4,5,6,7,8,9,10,11,12] —> [1,2,3,4] [5,6,7,8] [9,10,11,12][1,2,3,4,5,6,7,8,9,10,11,12,13] —> [1,2,3,4] [5,6,7,8] [9,10,11,12,13][1,2,3,4,5,6,7,8,9,10,11,12,13,14] —> [1,2,3,4] [5,6,7,8] [9,10,11,12,13,14][1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] —> [1,2,3,4] [5,6,7,8] [9,10,11,12,13,14,15][1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] —> [1,2,3,4] [5,6,7,8] [9,10,11,12] [13,14,15,16]Example report:$arr = range(1, 45);$arr = array_chunk_lazy($arr, 10);$arr = array_map(function($sub_value) { return implode('<br>', $sub_value); }, $arr);$title = '<h2>title</h2>';$arr = $title.implode($title, $arr).$title;echo $arr;