Buscar dentro de todos los array (PHP)

Amazon

Buenos días.

Tengo una tabla en sql que quiero exportar a JSON para luego tratarla con jquery (un desplegable). La cosa es que la tabla es recursiva, es decir, un objeto de esa tabla puede estar relacionado con otro de la misma tabla (su padre).

Ahora mismo saco los datos de los que no tienen padre (los miembros raíz) y va perfecto, pero el problema viene a la hora de insertar los hijos, pues no sé muy bien cómo buscar al padre en cuestión.

El objeto que tengo es el siguiente:

Array
(
    [categorias] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [nombre] => NOMBRE
                    [hijos] => Array
                        (
                        )
                )
        )
)

Y no se me ocurre la manera de buscar en todos los arrays para encontrar el ID que corresponda (es el dato que guardo en la BBDD sobre el padre) donde debería insertar al hijo. Por cierto, el objeto en cuestión me debería quedar así (desde el JSON que quiero obtener con json_decode)

stdClass Object
(
    [categorias] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 1
                    [name] => NOMBRE1
                    [childs] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [id] => 3
                                    [name] => NOMBRE3
                                    [childs] => Array
                                        (
                                        )

                            )

                        [1] => stdClass Object
                            (
                                [id] => 4
                                [name] => NOMBRE4
                                [childs] => Array
                                    (
                                    )

                            )

                        [2] => stdClass Object
                            (
                                [id] => 5
                                [name] => NOMBRE5
                                [childs] => Array
                                    (
                                    )

                            )

                        [3] => stdClass Object
                            (
                                [id] => 6
                                [name] => NOMBRE6
                                [childs] => Array
                                    (
                                    )

                            )

                    )

            )
    )
)

Sigo investigando mientras espero vuestras amadas respuestas :D

r2d2rigo

Haz dos tipos de requests: la que devuelve un array con todos los objetos raiz y otra que le pasas la ID del padre y te devuelve toda la lista de hijos.

2 respuestas
Amazon

#2 la idea era cargarlo todo de golpe y luego ir rellenando dinámicamente. Es decir, una consulta una vez

Amazon

#2 por ahora lo he logrado si el padre está en la raíz, ahora me queda la parte recursiva xD

RaymaN

Si cada categoría tiene una id distinta, añádelas como $array['categorias'][$id], así tienes acceso a los miembros raíz para añadir los hijos.

1 respuesta
Amazon

#5 pero entonces las tendría duplicadas, si te estoy entendiendo bien.

La cosa es que a las hijas también se le pueden añadir otras hijas (y, teóricamente, hasta el infinito)

Amazon

Mmmm... lo logré xD

EDIT: Arreglado el problema que tenía, maldita codificación...

Kiroushi

#1 Te dejo por aquí la forma "correcta" de hacer esto:

https://en.wikipedia.org/wiki/Nested_set_model

1

Usuarios habituales

  • Kiroushi
  • Amazon
  • RaymaN
  • r2d2rigo