Cita:
Iniciado por videlxu
Asu men con el codigo que me has pasado sigo con el mismo problema = a la funcion que tengo , no se puede paginar una funcion, desde la bd no lo intento porque me parece que sera el mismo resultado , solo dime que tengo que tomar para poder hacer la paginacion ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ porfa ¡¡¡

Bueno
videlxu como te comentaba, realice esta funcion con un proposito diferente, el cual es categorizar un array y poder exponerlo en modo arbol, y por lo que mencionas de
sistema de comentarios padre hijo crei que podria servirte.
La funcion solo requiere que le pases el arreglo bidimensional el cual deve tener 2 campos especificos, el que lo identifica y el que identifica a su padre, algo asi como:
Código PHP:
<?php
$arreglo = array(
0 => array(
'id' => 1, // campo identificador
'padre' => 0, // campo identificador del padre
'autor' => 'Josefino',
'mensaje' => 'Mensaje...',
'fecha' => 1548964523 // valor unix (yo asi manejo las fechas, no se como lo haras tu)
),
1 => array(
'id' => 2,
'padre' => 0,
'autor' => 'Gracielo',
'mensaje' => 'Mensaje...',
'fecha' => 1548984523
),
2 => array(
'id' => 3,
'padre' => 0,
'autor' => 'Rogelia',
'mensaje' => 'Mensaje...',
'fecha' => 1548988523
),
3 => array( // respuesta a mensaje 'id' => 2
'id' => 4,
'padre' => 2,
'autor' => 'Cacheton',
'mensaje' => 'Respuesta...',
'fecha' => 1548988623
),
4 => array(
'id' => 5,
'padre' => 0,
'autor' => 'Caliman',
'mensaje' => 'mensaje...',
'fecha' => 1548988723
),
5 => array( // respuesta a respuesta 'id' => 3
'id' => 6,
'padre' => 4,
'autor' => 'Caliman',
'mensaje' => 'Respuesta...',
'fecha' => 1548988823
)
);
?>
Al pasar el arreglo por la funcion, lo modifica ordenadolo para mostrarlo en modo arbol, y segun el campo especificado para ordenar, ademas los indices son reemplazados por el identificador de fila:
Código PHP:
<?php
categorize(
$arreglo,
'fecha', // campo a ordenar
SORT_ASC, // el modo a ordenar
'id', // nombre del campo identificador de fila
'padre' // nombre del campo identificador de fila padre
);
?>
El nuevo arreglo quedaria asi:
Código HTML:
Array
(
[1] => Array
(
[id] => 1
[padre] => 0
[autor] => Josefino
[mensaje] => Mensaje...
[fecha] => 1548964523
[__HIJOS__] => 0
[__NIVEL__] => 0
[__LUGAR__] => 1
)
[2] => Array
(
[id] => 2
[padre] => 0
[autor] => Gracielo
[mensaje] => Mensaje...
[fecha] => 1548984523
[__HIJOS__] => 1
[__NIVEL__] => 0
[__LUGAR__] => 2
)
[4] => Array
(
[id] => 4
[padre] => 2
[autor] => Cacheton
[mensaje] => Respuesta...
[fecha] => 1548988623
[__HIJOS__] => 1
[__NIVEL__] => 1
[__LUGAR__] => 0
)
[6] => Array
(
[id] => 6
[padre] => 4
[autor] => Caliman
[mensaje] => Respuesta...
[fecha] => 1548988823
[__HIJOS__] => 0
[__NIVEL__] => 2
[__LUGAR__] => 0
)
[3] => Array
(
[id] => 3
[padre] => 0
[autor] => Rogelia
[mensaje] => Mensaje...
[fecha] => 1548988523
[__HIJOS__] => 0
[__NIVEL__] => 0
[__LUGAR__] => 2
)
[5] => Array
(
[id] => 5
[padre] => 0
[autor] => Caliman
[mensaje] => mensaje...
[fecha] => 1548988723
[__HIJOS__] => 0
[__NIVEL__] => 0
[__LUGAR__] => 3
)
)
Ahora, para
paginar un hijo como lo mencionas, tengo otra funcion la cual retorna un array con la descendencia de una fila, esta se deve llamar despues de categorize():
Código PHP:
<?php
/**
* El parametro $id_fila de la cual se obtendra la descendencia
* El parametro $todos para obtener no solo los hijos, tambien nietos, bistnietos, etc.
*/
function categorize_getChildren($arreglo, $id_fila, $todos = false, $campo_id = 'id', $campo_padre = 'padre'){
$colector = array();
// verificar que el arreglo sea valido y que la $id_fila y campos id y padre existan
if(!is_array($arreglo) ||
1 > count($arreglo) ||
!array_key_exists($id_fila, $arreglo) ||
!is_array($arreglo[$id_fila]) ||
!array_key_exists($campo_id, $arreglo[$id_fila]) ||
!array_key_exists($campo_padre, $arreglo[$id_fila])
){
return $colector;
}
// la funcion-variable que hace el trabajo
$buscar_hijos = function(&$colector, $arreglo, $id_fila, $campo_id, $campo_padre, $buscar_hijos, $todos = false){
foreach($arreglo as $indice => $fila){
if($fila[$campo_padre] == $id_fila){
$colector[$fila[$campo_id]] = $fila;
unset($arreglo[$indice]);
if($todos){
$buscar_hijos($colector, $arreglo, $fila[$campo_id], $campo_id, $campo_padre, $buscar_hijos, true);
}
}
}
unset($indice, $fila);
};
$buscar_hijos($colector, $arreglo, $id_fila, $campo_id, $campo_padre, $buscar_hijos, $todos);
return $colector;
}
?>
Modo de uso:
Código PHP:
<?php
$hijos = categorize_getChildren(
$arreglo,
2, // id de fila de la cual se obtendra la descendencia
true, // para obtener hijos, nietos, etc.
'id', // nombre del campo identificador de fila
'padre' // nombre del campo identificador de fila padre
);
?>
El resultado seria:
Código HTML:
Array
(
[4] => Array
(
[id] => 4
[padre] => 2
[autor] => Cacheton
[mensaje] => Respuesta...
[fecha] => 1548988623
[__HIJOS__] => 1
[__NIVEL__] => 1
[__LUGAR__] => 0
)
[6] => Array
(
[id] => 6
[padre] => 4
[autor] => Caliman
[mensaje] => Respuesta...
[fecha] => 1548988823
[__HIJOS__] => 0
[__NIVEL__] => 2
[__LUGAR__] => 0
)
)
Bueno espero esto te funcione.
Saludos!