Foros del Web » Programando para Internet » PHP »

Ordenar array Multidimensional

Estas en el tema de Ordenar array Multidimensional en el foro de PHP en Foros del Web. Hola a todos, No me acabo de aclarar con las funciones de ordenamiento de arrays del php. Tengo el siguiente caso: Tengo una aplicación en ...
  #1 (permalink)  
Antiguo 20/09/2007, 08:07
 
Fecha de Ingreso: abril-2006
Mensajes: 76
Antigüedad: 18 años
Puntos: 0
Información Ordenar array Multidimensional

Hola a todos,

No me acabo de aclarar con las funciones de ordenamiento de arrays del php. Tengo el siguiente caso:

Tengo una aplicación en php que se conecta a x base de datos diferentes (hoteles) y junta los resultados de cada hotel en un unico array multidimensional. El problema radica que para imprimir los resultados, primero tengo que ordenarlo según la columna. Para tal fin tengo este array creado:

$datos = array();

Para cada conexión del hotel realizado varias operaciones del tipo:
$datos[$ttoo][$hotel][$ano][$mes] += $suma_del_hotel_del_mes;

Al acabar de recoger datos de los hoteles tengo una tabla SIN ORDENADAR de la forma:

TTOO | HOTEL| AÑO | MES |
TUI | HOTEL_1 | 2007 | 8 | 1000
THOMSON | HOTEL_1 | 2007 | 8 | 350
TUI | HOTEL_2 | 2007 | 8 | 800
THOMSON | HOTEL_2 | 2007 | 8 | 1500

Lo que quiero és poder ordenar este array por TTOO, luego por HOTEL. Como realizo una consulta en cada BBDD diferente no puedo realizar un order by en la consulta (ya me gustaria).

He probado con array_multisort( $dato[0] ) y con otros parametros pero no me lo ordena.

Alguna pista?

Saludos.
  #2 (permalink)  
Antiguo 20/09/2007, 08:38
 
Fecha de Ingreso: agosto-2007
Ubicación: En el lugar menos pensado
Mensajes: 83
Antigüedad: 16 años, 8 meses
Puntos: 2
Re: Ordenar array Multidimensional

Hola

Bueno, pues la verdad es que con arrays multidimensionales no me he metido mucho, pero pues se me ocurre que si no te dan otra solución, podrias hacer un split de dicho arreglo en varios arreglos agrupando los datos en unicos arreglos, por ej un arreglo ttoo que contenga tui y thomson por ej y asi sucesivamente y luego si los ordenas

O podrias intentar hacer la consulta con un union select y asi se unirian todos en una misma consulta, o pues como son los mismos datos podrias crear una tabla temporal que guarde todos los datos en esa tabla y ahi si podrias hacer order o group o lo que necesites

Son solo ideas, espero te sirva
  #3 (permalink)  
Antiguo 20/09/2007, 09:07
 
Fecha de Ingreso: abril-2006
Mensajes: 76
Antigüedad: 18 años
Puntos: 0
De acuerdo Re: Ordenar array Multidimensional

Hola

La de hacer union de selects es imposible, por que son base de datos sql server en diferentes servidores. Lo de hacer splits no lo acabo de entender, mejor si me indicas un ejemplo facil y el comando php. Yo pensaba que los arrays multidimensionales era muy parecido a una tabla de sql, que luego la puedes ordenador por el campo que se quiera, pero no he encontrado la manera todavia.

Una solución que no me gusta en absoluto es guardar los resultados obtenidos en una tabla en una base de datos general y luego hacer un select de esta tabla con todos los datos ordenados como yo quiera. Pero claro, estamos hablando de primero leer datos de los hoteles, grabarlos todos en otra BBDD, luego leerlos otra vez....vaya mucho trabajo para una simple consolidación de datos (si php no es capaz, tendre que llegar a este extremo, pero me quiero asegurar primero de que si puede).

Saludos.
  #4 (permalink)  
Antiguo 20/09/2007, 12:20
 
Fecha de Ingreso: mayo-2006
Mensajes: 288
Antigüedad: 18 años
Puntos: 4
Re: Ordenar array Multidimensional

Ummm interesante pero gueno tratare de ayudar ok.
Podrias usar asortasi:

Código PHP:
<?php
$nuevodat
[$ttoo] = "$ttoo | $hotel | $ano | $mes ";
asort($nuevodat);
reset($nuevodat);
$key key($nuevodat);
$cnt count($nuevodat);
for(
$i=0;$i<$cnt;$i++){
     echo 
$key;
     
next($key);
}
?>
Espero que se sirva de mucha ayuda, no recuerdo muy bien como era el algoritmo que yo manejaba pero esra muy parecido.

Última edición por netserver; 20/09/2007 a las 12:21 Razón: equivocaion
  #5 (permalink)  
Antiguo 21/09/2007, 08:31
 
Fecha de Ingreso: abril-2006
Mensajes: 76
Antigüedad: 18 años
Puntos: 0
Re: Ordenar array Multidimensional

Hola,

Probaré esta solución. Gracias por la ayuda. La verdad es que no habia pensado nada con el asort, pero ahora investigaré más.

Saludos.
  #6 (permalink)  
Antiguo 18/12/2007, 18:44
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Ordenar array Multidimensional

Aca un ejemplo de algo que he hecho yo y funciona. Son arrays independientes pero luego si quieres puedes de todos hacer uno solo que sea multidimensional (eso es lo de menos)

<?php
### ORDENO una matriz (o matrices) en base al ordenamiento de otra !!!!!!!!!!!!!!!!!!!

$m = array("2.2.2.1","2.2.2.11","2.2.2.10","2.2.2.2","2 .2.2.3","5.1.0.1");
$n = array("tuercas","tornillos","clavos","metales","al eaciones","herramientas");

natsort($m); // orden natural

foreach ($m as $key => $val) {
$nn [$key] = $n[$key];
echo $nn [$key].$b;
}

?>

Se ordena la matriz $m y en base a esta se ordena $n y el resultado queda en $nn
__________________
Salu2!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 09:38.