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:
El resultado de mostrar el dato con print_r() es este, y aparentemente es lo que quiero, incluido el orden de aparación..Ver original
{ $bigArray[] = $rowhijos; } /*función procedente de la red para establecer la jerarquía */ foreach ($elements as $element) { if ($element['FKRefLema'] == $parentId) { $children = buildTree($elements, $element['FKLema']); if ($children) { $element['children'] = $children; } $branch[] = $element; } } return $branch; }
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
function recorro($matriz){ $cadena=''; foreach($matriz as $key=>$value){ //si es un array sigo recorriendo //echo 'key:'. $key; //echo '<br>'; recorro($value); }else{ $PKlema=''; $lema=''; $status=''; //si es un elemento lo muestro if($key == 'FKLema') {$PKlema = $value; $cadena.= '<a href="http://www.dicciogriego.es/index.php?op=1&PKLema='.$PKlema.'">';} if($key == 'lema') {$lema = $value; $cadena.=$lema.'</a>, ';} if($key == 'FKStatus') {$status = $value;} //echo $key.': '.$value ; //echo '<br>'; } } return $cadena; }
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:
en lugar de Ver original
echo '<br />'; echo recorro($tree);
αἰτέω, αἰτιάομαι, αἰτία, αἴτιος,
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.