Foros del Web » Programando para Internet » PHP »

doble ordenamiento en un xml

Estas en el tema de doble ordenamiento en un xml en el foro de PHP en Foros del Web. Hola a todos, tengo unos datos en un xml y en estos momentos los estoy ordenando de acuerdo a un atributo, lo que me funciona ...
  #1 (permalink)  
Antiguo 12/01/2012, 10:14
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
doble ordenamiento en un xml

Hola a todos, tengo unos datos en un xml y en estos momentos los estoy ordenando de acuerdo a un atributo, lo que me funciona perfectamente

Sin embargo, necesito hacerle otro ordenamiento: algo asi en sql cuando se hacer ORDER BY 1, 2

El codigo es:
Código PHP:
Ver original
  1. <?php
  2. $archivo="calculo_12012012105615_1110490997.xml";
  3. $x = new SimpleXMLElement($archivo, null, true);
  4. $procedimi = $x->xpath('/calculadora/procedimiento');
  5.     function ordenar ($t1, $t2)
  6.     {
  7.     return strcmp($t1['evento'], $t2['evento']);
  8.     }
  9.      usort($procedimi, 'ordenar');
  10. foreach( $procedimi as $procedimientos )
  11.          {
  12.          $codigo=$procedimientos['codigo'];
  13.          $nombre=$procedimientos->nombre;
  14.          $consecutivo=$procedimientos['consecutivo'];
  15.          $evento=$procedimientos['evento'];
  16.          echo $codigo."---".$nombre."</br>";
  17.          }
  18. ?>

Como pueden ver, los datos los estoy ordenando segun el atributo evento

Pero necesito ordenarlo como segunda medida por consecutivo, como podria hacerlo?....Agradezco me puedan ayudar..muchas gracias
  #2 (permalink)  
Antiguo 12/01/2012, 18:11
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: doble ordenamiento en un xml

Creo que este es el orden que quieres:

Código PHP:
Ver original
  1. <?php
  2. $archivo = "calculo_12012012105615_1110490997.xml";
  3. $x = new SimpleXMLElement($archivo, null, true);
  4. $procedimi = $x->xpath('/calculadora/procedimiento');
  5.  
  6. function ordenar($t1, $t2) {
  7.     $r =  strnatcmp($t1['evento'], $t2['evento']);
  8.     if (!$r) {
  9.         return strnatcmp($t1['consecutivo'], $t2['consecutivo']);
  10.     }
  11.     return $r;
  12. }
  13. usort($procedimi, 'ordenar');
  14.  
  15. foreach ($procedimi as $procedimientos) {
  16.     $codigo = $procedimientos['codigo'];
  17.     $nombre = $procedimientos->nombre;
  18.     $consecutivo = $procedimientos['consecutivo'];
  19.     $evento = $procedimientos['evento'];
  20.     echo "$evento --- $consecutivo --- $codigo --- $nombre<br />";
  21. }

Cita:
evento --- consecutivo
1 --- 1
1 --- 2
1 --- 3
2 --- 1
Si algo me avisas y lo seguimos mirando.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 13/01/2012, 10:06
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: doble ordenamiento en un xml

Muchas gracias sirvio perfectamente..

Una ultima consulta, si quisiera tenerle un tercero ordenamiento (dado el caso en que lo necesite), lo podria aplicar asi:

Código PHP:
Ver original
  1. <?php
  2. function ordenar($t1, $t2) {
  3.     $r =  strnatcmp($t1['evento'], $t2['evento']);
  4.     if (!$r) {
  5.         $r=strnatcmp($t1['consecutivo'], $t2['consecutivo']);
  6.     }
  7.     if(!$r)
  8.     {
  9.        return strnatcmp($t1['total'], $t2['total']);
  10.     }
  11.     return $r;
  12. }  
  13. ?>
En estos momentos no tengo las herramientas para probar....por eso consulto...

Etiquetas: doble, ordenamiento, sql, xml
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.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:47.