• Publicidad

Ordernar un arreglo de hash para mostrar en una plantilla

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Ordernar un arreglo de hash para mostrar en una plantilla

Notapor fjmn2001 » 2011-09-26 16:31 @730

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $respuestas     = $self->dbh->selectall_hashref("SELECT * FROM respuesta", 'id_respuesta');
  2. $respuestas        = [map $respuestas->{$_}, keys %$respuestas];
  3. $$vars{respuestas} = $respuestas;
  4.  
  5. return $self->processtmpl($file,$vars);
  6.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


El código anterior toma las respuestas de la base de datos y las retorna a una plantilla usando template toolkits, lo que no logro solucionar es cómo ordenar las respuestas ya que no tienen un orden lógico... el id_respuesta en un entero que se incremente en 1 cada vez que se realiza una respuesta.
Última edición por fjmn2001 el 2011-09-26 17:34 @774, editado 1 vez en total
fjmn2001
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2009-06-25 15:11 @674

Publicidad

Re: Ordernar un arreglo de hash para mostrar en una plantilla

Notapor explorer » 2011-09-26 16:55 @746

¿Qué es esto?
[mas $respuestas->{$_}, keys %$respuestas]

El problema es que al guardar el resultado en un hash, el orden de los datos ya no coincide con el orden de los datos recuperados (es algo intrínseco al comportamiento de los hash).

Si el orden es importante, es mejor usar otro método, como selectall_arrayref().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ordernar un arreglo de hash para mostrar en una plantilla

Notapor fjmn2001 » 2011-09-26 17:37 @776

Estoy usando hashref porque necesito los nombres de los campos de la base de datos para mostrar el template. Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. [%FOREACH d IN respuestas%]
  2.    <p>[%d.respuesta%]</p>
  3. [%END%]
  4.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Respuesta sería uno de los campos de la tabla.
fjmn2001
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2009-06-25 15:11 @674

Re: Ordernar un arreglo de hash para mostrar en una plantilla

Notapor explorer » 2011-09-27 05:39 @277

selectall_hashref() sacará los registros, indexados por el campo 'id_respuesta'.

Dices que es numérico, así que podríamos ordenarlo de esa manera.

$respuestas = [ map { $respuestas->{$_} } sort {$a <=> $b} keys %{$respuestas} ];

De esa manera, $respuestas acaba siendo una referencia a un array con todos los registros ordenados numéricamente y de menor a mayor, según la clave de %$respuestas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 30 invitados