Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/03/2014, 02:49
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
recorrer array multidimensional y mantener orden

Estimados amigos,
Tengo un problema porque al recorrer un array multidimensional me cambia el orden respecto a lo que yo esperaba. Os explicaré el proceso que he seguido. Tras una consulta a mi base de datos me traigo los datos necesarios y los cargo en un array que recorro mediante una función recursiva para establecer la jerarquía de dependencia, mi principal objetivo. Esta primera parte parece funcionar bien:
Consulta

Código PHP:
Ver original
  1. $bigArray = array();
  2.  while ($rowhijos = mysqli_fetch_assoc($resulthijos))                      
  3.     {
  4.   $bigArray[] = $rowhijos;
  5.     }
  6.  
  7. /*función procedente de la red para establecer la jerarquía */
  8. function buildTree(array $elements, $parentId = 0) {
  9.     $branch = array();
  10.  
  11.     foreach ($elements as $element) {
  12.         if ($element['FKRefLema'] == $parentId) {
  13.             $children = buildTree($elements, $element['FKLema']);
  14.             if ($children) {
  15.                 $element['children'] = $children;
  16.             }
  17.             $branch[] = $element;
  18.         }
  19.     }
  20.  
  21.     return $branch;
  22. }
El resultado de mostrar el dato con print_r() es este, y aparentemente es lo que quiero, incluido el orden de aparación..

Array ( [0] => Array ( [FKLema] => 65 [lema] => αἰτέω [FKRefLema] => 23346 [FKStatus] => 5 ) [1] => Array ( [FKLema] => 66 [lema] => αἰτία [FKRefLema] => 23346 [FKStatus] => 5 [children] => Array ( [0] => Array ( [FKLema] => 68 [lema] => αἰτιάομαι [FKRefLema] => 66 [FKStatus] => 5 ) ) ) [2] => Array ( [FKLema] => 67 [lema] => αἴτιος [FKRefLema] => 23346 [FKStatus] => 5 ) )


Pero al tratar de recorrer ese array multidimensional mediante otra función, también tomada de la red, y mostrar los datos, el orden que sale no es el esperado

Código PHP:
Ver original
  1. function recorro($matriz){
  2.  $cadena='';
  3.     foreach($matriz as $key=>$value){
  4.         if (is_array($value)){  
  5.                         //si es un array sigo recorriendo
  6.             //echo 'key:'. $key;
  7.             //echo '<br>';
  8.             recorro($value);
  9.         }else{
  10.         $PKlema='';
  11.         $lema='';
  12.         $status='';
  13.        
  14.                //si es un elemento lo muestro
  15.                
  16.                if($key == 'FKLema') {$PKlema = $value;  $cadena.= '<a href="http://www.dicciogriego.es/index.php?op=1&PKLema='.$PKlema.'">';}
  17.                if($key == 'lema') {$lema = $value; $cadena.=$lema.'</a>, ';}
  18.                if($key == 'FKStatus') {$status = $value;}
  19.             //echo $key.': '.$value ;
  20.             //echo '<br>';
  21.         }
  22.  
  23.     }
  24. return $cadena;
  25. }

Al mostrar los datos se desordenan respecto a lo mostrado en el print_r() de la primera función jerárquica. Quiero mantener el orden que sale de esa función recursiva.
Código PHP:
Ver original
  1. echo '<br />';
  2. echo recorro($tree);
en lugar de
αἰτέω, αἰτιάομαι, αἰτία, αἴτιος,

debería de aparecer este otro
αἰτέω, αἰτία, αἰτιάομαι, αἴτιος

No sé si el fallo está en el modo de cargar el array desde la base, o en la función recursiva, aunque creo que no; me parece que está en la que recorre el resultado de la recursiva para mostrar los datos, pero no estoy seguro.

Agradeceré cualquier indicación o ayuda.

Última edición por jurena; 01/03/2014 a las 14:08