Llevo días con un problemilla tratando de crear un organigrama de manera dinámica, leyendo la información de MySQL y creando con PHP las jerarquías.
La estructura del organigrama debe ser parecida a:
Código PHP:
   Direccion General
Dirección Comercial
      |---> Ventas
      |---> Marketing
Dirección Finanzas
      |---> Contabilidad
      |---> Crédito
Recursos Humanos
Dirección Operaciones
      |---> Centros
               |---> Almacen
               |---> Contabilidad
               |---> Pedadogía
                        |---> Supervisores
                        |---> Profesores
               |---> Recepción
      |---> Logistica
Dirección IT 
    La información que recibo desde MySQL en la variable $result viene de la siguiente forma:
Código:
  
Y el echo debe imprimir una cadena con la siguiente estructura:mysql> SELECT id, position, parentid FROM Jobs; +---+----------------------+----------+ | id | position | parentid | +---+----------------------+----------+ | 1 | Direcion General | Null | | 2 | Dirección Comercial | Null | | 3 | Ventas | 2 | | 4 | Marketing | 2 | | 5 | Dirección Finanzas | Null | ... ...
Código:
  
El siguiente código me funciona solo cuando hay nivel 0 y nivel 1, pero cuando existen más niveles me da error al no cerrar correctamente el children del nivel anterior al actual.[
  {id:1, position:"Dirección General", leaf:true},
  {id:2, position:"Dirección Comercial", children:[
    {id:3, position:"Ventas", leaf:true},
    {id:4, position:"Marketing", leaf:true}
  ]},
  {id:5, position:"Dirección Finanzas", children:[
    ...
  ]}
  ...
]
Código PHP:
   $dptos = new Department();
$result = $dptos->getDptosByCompany($cookie->idcompany);
if ($result) {
     $str = '[';
     for ($i=0; $i<sizeof($result); $i++) {
          $str .= '{id:'.$result[$i]['id'];
          $str .= ', position:"'.$result[$i]['position'].'"';
          if ($result[$i]['id'] == $result[$i+1]['parentid'])
               $str .= ', children:[';
          else
               $str .= ($result[$i]['parentid'] != $result[$i+1]['parentid']) ? ', leaf:true}]},' : ', leaf:true},';  
     }
     echo rtrim($str,',').']';
} else
     echo false; 
    Saludos,
Silver
 
