Функция для разбивки массива

Главные вкладки

Аватар пользователя goodboy goodboy 28 октября 2008 в 15:02

Сделал для своих нужд функцию, которая разбивает массив на несколько подмассивов(колонок). Принцип: "из двух соседних колонок, длина левой не меньше длины правой". Например, массив из 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;
}

Использование:

$test = range(1,10);
print_r ( array_divide($test,3) );

Не ругайте сильно, если изобрел велосипед ))
Если будет желание - протестируйте.

Комментарии