1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Re:Algoritmo para creación de arbol JSON
« en: 14 de Diciembre 2016, 16:31 »
Facil mira hay varios pasos:
1) preparar el arreglo para que los elementos tengan hijos, si lo haces con php primero hay que convertirlo usando json_decode(); nos da algo asi:
Luego hay que preparar los elementos agregándoles un "hijo" que es un array.
Luego recorres otravez todo el array de herramientas, si padre es 0 continuamos, si padre no es 0, buscamos su padre lo metemos en hijos y lo borramos del arreglo original
Mas o menos asi:
Talvez no funcione... necesito cafe xD
1) preparar el arreglo para que los elementos tengan hijos, si lo haces con php primero hay que convertirlo usando json_decode(); nos da algo asi:
Código: [Seleccionar]
Array
(
[0] => stdClass Object
(
[id] => 1384417
[nombre] => HERRAMIENTAS ELÉCTRICAS
[padre] => 0
)
[1] => stdClass Object
(
[id] => 1384418
[nombre] => Amoladoras
[padre] => 1384417
)
[2] => stdClass Object
(
[id] => 1384419
[nombre] => Aspiradoras/Sopladores de Hojas
[padre] => 1384417
)
[3] => stdClass Object
(
[id] => 1384420
[nombre] => Atornilladores
[padre] => 1384417
)
[4] => stdClass Object
(
[id] => 1384423
[nombre] => Cepillos
[padre] => 1384417
)
[5] => stdClass Object
(
[id] => 1384424
[nombre] => Cortacercos
[padre] => 1384417
)
[6] => stdClass Object
(
[id] => 1384425
[nombre] => Electrosierras
[padre] => 1384417
)
[7] => stdClass Object
(
[id] => 1384444
[nombre] => Estación de Inflado
[padre] => 1384417
)
[8] => stdClass Object
(
[id] => 1384445
[nombre] => Herramientas Estacionarias
[padre] => 1384417
)
[9] => stdClass Object
(
[id] => 1384446
[nombre] => Taladros de Banco
[padre] => 1384445
)
[10] => stdClass Object
(
[id] => 1384447
[nombre] => Sierras Ingleteadoras
[padre] => 1384445
)
[11] => stdClass Object
(
[id] => 1384448
[nombre] => Sierras de Banco
[padre] => 1384445
)
[12] => stdClass Object
(
[id] => 1384449
[nombre] => Lijadoras
[padre] => 1384417
)
[13] => stdClass Object
(
[id] => 1384450
[nombre] => De Banda
[padre] => 1384449
)
[14] => stdClass Object
(
[id] => 1384451
[nombre] => Orbitales
[padre] => 1384449
)
[15] => stdClass Object
(
[id] => 1384452
[nombre] => Llaves de Impacto
[padre] => 1384417
)
[16] => stdClass Object
(
[id] => 1384453
[nombre] => Martillos
[padre] => 1384417
)
[17] => stdClass Object
(
[id] => 1384454
[nombre] => Con Rotación
[padre] => 1384453
)
[18] => stdClass Object
(
[id] => 1384455
[nombre] => Sin Rotación
[padre] => 1384453
)
[19] => stdClass Object
(
[id] => 1384456
[nombre] => Pistolas de Calor
[padre] => 1384417
)
[20] => stdClass Object
(
[id] => 1384457
[nombre] => Pulidoras
[padre] => 1384417
)
[21] => stdClass Object
(
[id] => 1384458
[nombre] => Routers
[padre] => 1384417
)
[22] => stdClass Object
(
[id] => 1384459
[nombre] => Sierras
[padre] => 1384417
)
[23] => stdClass Object
(
[id] => 1384460
[nombre] => Taladros
[padre] => 1384417
)
[24] => stdClass Object
(
[id] => 1384461
[nombre] => Con Percusión
[padre] => 1384460
)
[25] => stdClass Object
(
[id] => 1384462
[nombre] => Sin percusión
[padre] => 1384460
)
[26] => stdClass Object
(
[id] => 1384464
[nombre] => Tornos Manuales
[padre] => 1384417
)
[27] => stdClass Object
(
[id] => 1508300
[nombre] => HERRAMIENTAS A BATERÍA
[padre] => 0
)
[28] => stdClass Object
(
[id] => 1508315
[nombre] => Atornilladores
[padre] => 1508300
)
[29] => stdClass Object
(
[id] => 1384463
[nombre] => Taladros
[padre] => 1508300
)
[30] => stdClass Object
(
[id] => 1384426
[nombre] => HERRAMIENTAS A EXPLOSIÓN
[padre] => 0
)
[31] => stdClass Object
(
[id] => 1384465
[nombre] => Desmalezadoras
[padre] => 1384426
)
[32] => stdClass Object
(
[id] => 1384466
[nombre] => Grupos Electrógenos
[padre] => 1384426
)
[33] => stdClass Object
(
[id] => 1384467
[nombre] => Motosierras
[padre] => 1384426
)
[34] => stdClass Object
(
[id] => 1384427
[nombre] => HIDROLAVADORAS ELÉCTRICAS
[padre] => 0
)
[35] => stdClass Object
(
[id] => 1384471
[nombre] => NIVELES LÁSER
[padre] => 0
)
[36] => stdClass Object
(
[id] => 1384472
[nombre] => LINTERNAS RECARGABLES
[padre] => 0
)
[37] => stdClass Object
(
[id] => 1384428
[nombre] => ACCESORIOS Y ELECTRÓNICOS
[padre] => 0
)
[38] => stdClass Object
(
[id] => 1384468
[nombre] => Baterías
[padre] => 1384428
)
[39] => stdClass Object
(
[id] => 1384469
[nombre] => Cargadores de Batería
[padre] => 1384428
)
[40] => stdClass Object
(
[id] => 1384470
[nombre] => Conservadoras
[padre] => 1384428
)
[41] => stdClass Object
(
[id] => 1384473
[nombre] => Para Compresores
[padre] => 1384428
)
)
Luego hay que preparar los elementos agregándoles un "hijo" que es un array.
Código: [Seleccionar]
$tmp = json_decode($a);
foreach($tmp as $b) {
$b->hijos = array();
}
Luego recorres otravez todo el array de herramientas, si padre es 0 continuamos, si padre no es 0, buscamos su padre lo metemos en hijos y lo borramos del arreglo original
Mas o menos asi:
Código: [Seleccionar]
$tmp = json_decode($a);
foreach($tmp as $c) {
$retval = insertarEnPadre($tmp, $c->padre, $c);
if($retval == 0) {
unset($c);
}
}
function insertarEnPadre($herramientas, $id, $hijo){
foreach($herramientas as $herramienta) {
if($herramienta->padre == 0) {
continue;
} else {
if($id == $herramienta->padre) {
if(!isset($herramienta->hijos)) {
$herramienta->hijos = array();
}
array_push($herramienta->hijos, $hijo);
return 0;
}
}
}
return 1;
}
print_r($tmp);
Talvez no funcione... necesito cafe xD