Сделал для своих нужд функцию, которая разбивает массив на несколько подмассивов(колонок). Принцип: "из двух соседних колонок, длина левой не меньше длины правой". Например, массив из 10 элементов разбивается на 3 части как 4-3-3, из 11 элементов как 4-4-3.
Разбить массив arr на n частей
Возвращает массив res, содержащий части исходного массива
*/
function array_divide($arr, $n) {
//Проверка входных параметров и подготовка
$res = array();
$cnt = count($arr);
if ( $n < 1 || $cnt < 1) return $res;
$part = intval( $cnt / $n);
$rest = $cnt - $part*$n;
//Определение массива интервалов
$intervals = array(0 => 0);
for ( $i=1; $i<$n; $i++ )
$intervals[$i] = $part*$i;
while ( $rest > 0 ) {
for ( $i=1; $i < count($intervals); $i++ ) {
$intervals[$i]++; $rest--;
}
}
$intervals[] = $cnt;
//Заполнение результирующего массива
for ( $i=0; $i < count($intervals)-1; $i++ )
$res[$i] = array_slice( $arr, $intervals[$i], $intervals[$i+1]-$intervals[$i] );
return $res;
}
Использование:
Не ругайте сильно, если изобрел велосипед ))
Если будет желание - протестируйте.
Комментарии
Спасибо, пригодится