He hecho una simulación de lo que creo que quieres hacer.
Mira a ver si te vale.
Desde un array bidimensional de 100 arrays de 50 campos genero uno que contiene arrays con el límite dado y cada uno con el límite de campos indicado
Código PHP:
//Creo un array bidimensional de 100 arrays de 50 campos (en tu caso el que recuperes de BD)
for($i=0; $i < 100; $i++)
{
$array_temp=array();
for($j=0; $j < 50; $j++)
{
$array_temp["dato_".$j] = $j;
}
$array_total[]=$array_temp;
}
//Tamaño de los arrays a generar
$tamanio_array = 15;
//Campos dentro de los arrays
$numero_campos = 20;
//Inicio del contador de arrays
$n_array = 1;
//Inicio de contador de array actual
$i = 0;
//Inicio del array de los arrays divididos (resultado)
$array_dividido = array();
//Por cada array del array generado
foreach($array_total as $array_datos)
{
//Inicio del contador del campo actual
$j = 0;
//Inicio del array temporal
$array_temporal = array();
//Por cada campo del array de datos
foreach($array_datos as $campo => $valor)
{
//Pasamos el valor al array temporal con el mismo nombre de campo
$array_temporal[$campo] = $valor;
//Sumamos uno al contador del campo actual y lo comparamos con el límite de campos, si es igual rompemos el foreach
if(++$j == $numero_campos){ break; }
}
//Pasamos el array temporal al array del resultado
$array_dividido[$n_array][] = $array_temporal;
//Sumamos uno al contador de arrays y lo comparamos con el límite de arrays, si es igual ponemos el contador a 0
//e incializamos el campo del siguiente array
if(++$i == $tamanio_array){ $i=0; $n_array++; }
}
//mostrar_array
echo "<b>".__FILE__.":".__LINE__."</b><br><pre>".print_r($array_dividido,true)."</pre>";flush();