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 {
$bigArray[] = $rowhijos;
}
/*función procedente de la red para establecer la jerarquía */
function buildTree
(array $elements, $parentId = 0) {
foreach ($elements as $element) {
if ($element['FKRefLema'] == $parentId) {
$children = buildTree($elements, $element['FKLema']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
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 originalfunction 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.
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.