Partition an Array Into N Groups
Split a list into p slices of roughly equal size, spreading any remainder across the first groups so lengths differ by at most one.
function partition_array($list, $p)
{
$list_length = count($list);
$partition_length = floor($list_length / $p);
$partition_remainder = $list_length % $p;
$partition = array();
$mark = 0;
for ($px = 0; $px < $p; $px++) {
$increment = ($px < $partition_remainder) ? $partition_length + 1 : $partition_length;
$partition[$px] = array_slice($list, $mark, $increment);
$mark += $increment;
}
return $partition;
}