Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/05/2014, 23:54
Avatar de Atomycko
Atomycko
 
Fecha de Ingreso: diciembre-2005
Ubicación: Zapopan Jal.
Mensajes: 92
Antigüedad: 19 años, 2 meses
Puntos: 12
Respuesta: Paginacion en php

Bueno, yo tube un problema similar, ocupaba categorizar un array y cree una funcion para esto, imagino que puede servirte, solo se requieren de dos campos para que funcione, el identificador y el padre:

Código PHP:
<?php
/*
 * Estructura requerida del arreglo:
 * $arreglo = array(
 *     array(
 *         'campo_id'=>INT,
 *         'campo_padre'=>INT[,
 *         ...]
 *     ),
 *     ...]
 * )
 *
 * El arreglo sera modificado teniendo el 'campo_id' asociado a las filas
 *
 * El parametro "$campo_ordenar" me imagino pondras el que contiene la fecha de publicacion
 * Los parametros "$campo_id" y "$campo_padre" los nombres de los campos, repectivamente, dentro de las filas
 */
function categorize(&$arreglo$campo_ordenar false$modo_orden SORT_ASC$campo_id 'id'$campo_padre 'padre'){
    
// verificar que el arreglo sea valido y los campos id y padre existan
    
if(!is_array($arreglo) || count($arreglo)){
        return;
    }
    
$u $arreglo;
    
$u array_pop($u);
    if(!
is_array($u) || !array_key_exists($campo_id$u) || !array_key_exists($campo_padre$u)){
        return;
    }

    
// ordenar el arreglo segun el campo especificado
    
if($campo_ordenar && array_key_exists($campo_ordenar$u)){
        
$lista = array();
        foreach(
$arreglo as $indice => $fila){
            
$lista[$indice] = $fila[$campo_ordenar];
        }
        unset(
$indice$fila);
        
array_multisort($lista$modo_orden$arreglo);
        unset(
$lista);
    }
    unset(
$u);

    
// se crea el colector asignando el indice 0 como el padre principal donde arranca la busqueda de hijos
    
$colector = array(array());
    
$colector[0]['_NIVEL_'] = -1;
    
$colector[0]['_HIJOS_'] = 0;
    
$colector[0][$campo_padre] = -1;

    
// la funcion-variable que hace el trabajo
    
$busca_hijos = function(&$colector$arreglo$id_padre$campo_id$campo_padre$busca_hijos){
        
$x 0;
        foreach(
$arreglo as $indice => $fila){
            if(
$fila[$campo_padre] == $id_padre){
                
$colector[$id_padre]['_HIJOS_'] ++;
                
$fila['_HIJOS_'] = 0;
                
$fila['_NIVEL_'] = $colector[$id_padre]['_NIVEL_'] + 1;
                
$fila['_LUGAR_'] = $x 1;
                
$colector[$fila[$campo_id]] = $fila;
                unset(
$arreglo[$indice]);
                
$busca_hijos($colector$arreglo$fila[$campo_id], $campo_id$campo_padre$busca_hijos);
                
$final $fila[$campo_id];
                
$x ++;
            }
        }
        unset(
$indice$fila);
        if(
$x 1){
            
$colector[$final]['_LUGAR_'] = 3;
        }
        else if(
$x 0){
            
$colector[$final]['_LUGAR_'] = 0;
        }
    };
    
$busca_hijos($colector$arreglo0$campo_id$campo_padre$busca_hijos);
    unset(
$colector[0]);

    
// si "$colector" y "$arreglo" son diferentes es porque alguna fila quedo sin padre en algun mal manejo de datos al actualizar la tabla
    // estos "huerfanos" se agregan al final del nuevo "$arreglo"
    
if(count($arreglo) != count($colector)){
        foreach(
$arreglo as $fila){
            if(!
array_key_exists($fila[$campo_id], $colector)){
                
$fila['_HIJOS_'] = 0;
                
$fila['_NIVEL_'] = 0;
                
$fila['_LUGAR_'] = 0;
                
$colector[$fila[$campo_id]] = $fila;
            }
        }
        unset(
$fila);
    }

    
$arreglo $colector;
}
?>
Modo de uso:

Código PHP:
<?php
$consulta 
mysql_query("SELECT * FROM tabla"$conexion);
$lista = array();
while(
$fila mysql_fetch_assoc($consulta)){
    
$lista[] = $fila;
}
mysql_free_result($consulta);
unset(
$consulta$fila);

categorize($lista);

foreach(
$lista as $id => $datos){
    echo 
str_repeat('&nbsp; &nbsp;'$datos['_NIVEL_']) . $datos['mensaje'] .'<br />';
}
?>
Bueno espero te sirva, si lo usas nos cuentas que tal te fue.

Saludos!
__________________
PD: Los acentos fueron secuestrados.

Última edición por Atomycko; 28/05/2014 a las 00:00 Razón: El operador de comparacion en "if(count($arreglo) != count($colector))" era ">"