Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/10/2005, 16:45
panquetofobia
 
Fecha de Ingreso: octubre-2005
Mensajes: 3
Antigüedad: 18 años, 5 meses
Puntos: 0
Exclamación paginar array con array_chunk();

Hola a todos.

Tengo un problema con un script y les pido su ayuda.
Resulta que hago 4 consultas como esta, una para cada $piz_id
Código PHP:
$sql="    
            SELECT  
            ir.soporte_pizarron_id AS piz_id,
            ir.interaccion_mensaje_oportunidad_id AS op_id,
            op.oportunidad_pizarron_producto AS producto,
            ir.num_mensajes_p AS men_p,
            ir.num_mensajes_a AS men_a,
            ir.num_mensajes_i AS men_i,
            (ir.num_mensajes_a + ir.num_mensajes_p + ir.num_mensajes_i) AS total
            FROM inter_res AS ir 
            LEFT JOIN opor_piz AS op
            ON op.oportunidad_pizarron_id=ir.interaccion_mensaje_oportunidad_id 
            WHERE 
            ir.soporte_pizarron_id="
.$piz_id." AND
            ir.num_mensajes_p >0 
            ORDER BY ir.num_mensajes_p DESC
            "

a la base de datos, y guardo los resultados de esas 4 consultas en un array llamado $filas, que después ordeno con array_multisort().

el número de filas es variable, y hay consultas que generan más de 4000 resultados, así que debo de paginar el array ya ordenado.

estaba probando con la función array_chunk() para dividir el array entre el número de páginas.
En este caso, el total de los registros en mi array $filas es 30. el número de registros que debo mostrar por página es de 10, así que el array_chunk() me devuelve 3 arrays...uno para cada página.

Código PHP:
foreach ($filas as $llave => $fila//preparo el array para el multisort
{
   
$pizarron[$llave]     = $fila['pizarron'];
   
$oportunidad[$llave]  = $fila['oportunidad'];
   
$producto[$llave]     = $fila['producto'];
   
$men_p[$llave]           = $fila['men_p'];
   
$men_a[$llave]          = $fila['men_a'];
   
$men_i[$llave]           = $fila['men_i'];
   
$total[$llave]           = $fila['total'];
}


array_multisort($men_p,SORT_DESC,$men_a,SORT_DESC,$men_i,SORT_DESC,$producto,SORT_DESC,$pizarron,SORT_DESC,$oportunidad,SORT_DESC,$total,SORT_DESC$filas); //ordeno el array

$por_pagina 10// resultados por página
$num_filas count($filas);// total de resultados ( 30 )
$total_pag ceil(($num_filas/$por_pagina));//número de páginas ( 3 )    
$filas_chunked array_chunk($filas,$por_pagina); //3 arrays devueltos
if($_GET['pagina']>=2/*con esto trato de determinar el array a mostrar (de entre los que resulten de array_chunk() ) de acuerdo al número de página solicitado por el usuario  */

    
$num_pagina $_GET['pagina'] -1/* si el num de pág. es 2, muestro $filas_chunked[1], etc; */

else 
{
    
$num_pagina 0/*si el num de pág. vale 1 o nada, muestro el primer trozo */
}

//hago el bucle para mostrar los resultados
for ($i 0$i count($filas_chunked[$num_pagina]); $i++ )
{
       echo 
$pizarron[$i] . " " $oportunidad[$i]; //etc

Los resultados se muestran perfectamente bien para el primer array cortado, o sea $filas_chunked[0], pero no para los demás.

Necesito poder 'paginar' mi array $filas una vez que lo ordene con array_multisort()...

Alguien puede ayudarme ???

De antemano se los agradezco.

Hasta pronto.