lo que podes hacer es algo similar a lo que hice yo, ya que en algun momento vas a necesitar saber de donde viene, solamente con el array completo podes trabajar todo desde una consulta. Lo que haria en tu caso es lo siguiente
Hago las consultas para crear el array con categorias iniciendo del padre (inicio) obtengo las imagenes de esa categoria
Código php:
Ver originalfunction crearArboles($parent='0',$ini){
global $DbConn;
//buscamos las categorias con el parent
$sql = 'SELECT * FROM categorias WHERE categoria_id ='.$parent;
$res = $DbConn->query($sql);
$numR = $DbConn->numRows($res);
while($arr = $DbConn->fetchArray($res)){
$arrRet[$ini]['id'] = $arr['id'];
$arrRet[$ini]['categoria'] = $arr['Nombre'];
//comenzamos a recorrer una por una, primero vamos a comprobar si tiene post
//donde getImagenesByCategoriaId es una funcion que llama a la base de datos y extra las imagenes con ese id de categoria
if($this->getImagenesByCategoriaId($arr['id'])>0){
$arrRet[$ini]['imagenes'] = $this->getImagenesByCategoriaId($arr['id']);
}
// buscas si tiene algun hijo. Si el numero es mayot a 0 te agrega el array hijo
if($this->getNumHijosByCategoria($arr['id'])>0){
// utilizo el metodo actual para hacer recursividad
$arrRet[$ini]['hijo'] = $this->crearArboles($arr['id'],$ini);
}
$ini++;
}
con esta funcion crearas un array completo con toda la informacion y ordenado jerarquicamente, ahora para lo que necesitas vos es cuestion del recorrido del mismo,
supongamos que quiero mostrar todas las imagenes de la categoria padre, ejemplo fauna->peces o de naturaleza -> océano
el array quedaria de esta manera:
Cita: (
[0] => Array (
[id] => 1
[categoria] => fauna
[imagenes]=> Array(
[0] => Array(
[id_imagen] =>1
[nombre] => fauna y diversidad
[path] =>
http://larala
)
)
[hijo] => Array (
[0] => Array{
[id] => 2
[categoria] => peces
[imagenes] => Array(
[0] => Array(
[id_imagen] =>1
[nombre] => fauna y diversidad
[path] =>
http://larala
)
)
)
)
)
luego para recorrer y poner las imagenes de fauna con las de sus hijos, habria que recorrerlo de la siguiente manera
Código php:
Ver originalforeach($lista as $num => $categoria){
$ret ='<h1>'.$categoria['categoria'].'</h1>'; // devuelve fauna
// recorremos las imagenes y las insertamos
// primero comprobamos que no esta vacio para que no tire error
if(!empty($categoria['imagenes']){ foreach($categoria['imagenes'] as $nImg => $imagen){
$ret . = '<a href="'.$imagen['path'].'" ><img src="'.$imagen['path'].'" alt="'.$imagen['nombre'].'" /></a><br/>';
}
}
// ahora recorremos las imagenes de las subcategorias
// aqui vamos a necesitar una funcion recursiva ya que al no saber cuantas subcategorias pueden existir es imposible determinar en una funcion cuantas veces tiene que recorrer, en principio una vez pero luego no sabemos
// en este caso la funcion recursiva solamente tiene que traer los datos
if(!empty($categoria['hijo']){ $ret.= getImagen($categoria['hijo'];
}
}
function getImagen($lista){
foreach($lista as $num => $categoria){
// recorremos las imagenes y las insertamos
// primero comprobamos que no esta vacio para que no tire error
if(!empty($categoria['imagenes']){ foreach($categoria['imagenes'] as $nImg => $imagen){
$ret . = '<a href="'.$imagen['path'].'" ><img src="'.$imagen['path'].'" alt="'.$imagen['nombre'].'" /></a><br/>';
}
}
//recursiva para traer los imagenes de los hijos
if(!empty($categoria['hijo']){ $ret .= getImagen($categoria['hijo']);
}
}
return $ret;
}