Foros del Web » Programando para Internet » PHP »

Ordenar array de objetos por atributos

Estas en el tema de Ordenar array de objetos por atributos en el foro de PHP en Foros del Web. Hola a todos. Estuve buscando una solución a mi problema pero no lo consigo. Tengo un array de objetos que obtengo de una base de ...
  #1 (permalink)  
Antiguo 11/10/2012, 13:07
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 16 años, 4 meses
Puntos: 26
Ordenar array de objetos por atributos

Hola a todos.

Estuve buscando una solución a mi problema pero no lo consigo.

Tengo un array de objetos que obtengo de una base de datos, en este caso los objetos son inscripciones de un curso. Dejo un ejemplo de un var_dump():

Código PHP:
array (size=2)
  
=>
    
object(stdClass)[22]
      public 
'id' => string '3' (length=1)
      public 
'fecha_hora' => string 'Miércoles, 10 de octubre de 2012 a las 04:31 hs' (length=48)
      public 
'persona' =>
        
object(stdClass)[25]
          public 
'id' => string '1' (length=1)
          public 
'nombre' => string 'Juan Manuel' (length=11)
          public 
'apellido' => string 'Sosa' (length=4)
  
=>
    
object(stdClass)[23]
      public 
'id' => string '4' (length=1)
      public 
'fecha_hora' => string 'Miércoles, 10 de octubre de 2012 a las 04:26 hs' (length=48)
      public 
'persona' =>
        
object(stdClass)[26]
          public 
'id' => string '2' (length=1)
          public 
'nombre' => string 'Natalia' (length=7)
          public 
'apellido' => string 'Ramírez' (length=8
Lo que yo quiero es ordenar ese array por el apellido y nombre de esas personas. ¿Es esto posible? Aclaro que no puedo traerlas ordenadas desde la base de datos porque debería usar JOINs y lo que yo hago es utilizar punteros de objetos, primero traigo de la base de datos las inscripciones y luego a cada una le enlazo el objeto persona con PHP.

Desde ya, gracias. Un saludo.
  #2 (permalink)  
Antiguo 11/10/2012, 14:23
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Ordenar array de objetos por atributos

No suelo usar arrays de objetos así que no sé qué tan difícil sea adaptar una función que hice hace tiempo y que puse como aporte (aunque nunca la pusieron en los aportes oficiales) y que permite ordenar por cualquier atributo un array de cualquier dimensión (aunque sea irregular).
  #3 (permalink)  
Antiguo 11/10/2012, 14:38
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 14 años, 1 mes
Puntos: 511
Respuesta: Ordenar array de objetos por atributos

Hola que tal.

Checa esto te puede ayudar multisort.

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #4 (permalink)  
Antiguo 11/10/2012, 14:44
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Ordenar array de objetos por atributos

mira el ejemplo 3 de acá http://php.net/manual/en/function.usort.php y ve si es lo que necesitas, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 11/10/2012, 19:30
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 16 años, 4 meses
Puntos: 26
Respuesta: Ordenar array de objetos por atributos

Gracias a todos.

Creo que con esto ya funciona bien, pero por las dudas voy a probarlo bien...

Código PHP:
$posicion = array();
$nueva_fila = array();

foreach (
$inscripciones as $i => $inscripcion) {
    
$posicion[$i] = $inscripcion->persona->apellido.', '.$inscripcion->persona->nombre;
    
$nueva_fila[$i] = $inscripcion;
}

asort($posicion);

$resultado = array();

foreach (
$posicion as $i => $pos) {
    
$resultado[] = $nueva_fila[$i];

Saludos.

Última edición por RabidFish; 11/10/2012 a las 19:37

Etiquetas: atributos, objetos
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




La zona horaria es GMT -6. Ahora son las 22:45.