Foros del Web » Programando para Internet » PHP »

Ordenar array

Estas en el tema de Ordenar array en el foro de PHP en Foros del Web. Hola tengo un problemilla que no se como resolver. tengo un array de la siguiente forma: Código PHP: $miarray =array(); $miarray [ 0 ]=array( "id" ...
  #1 (permalink)  
Antiguo 08/08/2008, 12:26
Avatar de chiviwalker  
Fecha de Ingreso: marzo-2004
Ubicación: Alicante
Mensajes: 55
Antigüedad: 20 años, 1 mes
Puntos: 0
Ordenar array

Hola tengo un problemilla que no se como resolver.

tengo un array de la siguiente forma:

Código PHP:
$miarray=array();

$miarray[0]=array("id"=>$rowd['id'],"nombre"=>$rowd['nombre'],"valor"=>$rowd['valor']);
$miarray[1]=array("id"=>$rowd['id'],"nombre"=>$rowd['nombre'],"valor"=>$rowd['valor']);
... 
Ahora tengo que ordenarlo para mostarlo de la siguiente forma:
Primero por nombre y despues por valor, pero nombre tiene un problema que son del estilo:
Lienzo 20x30
Lienzo 50x60
Lienzo 100x100 ---> en esto tengo el problema que al ordenarse se pone primero y como el valor es mayor que los otros queda:
Lienzo 100x100 - 20€
Lienzo 20x30 - 10€
Lienzo 50x60 - 15€

Cuando lo que quiero es que quede:
Lienzo 20x30 - 10€
Lienzo 50x60 - 15€
Lienzo 100x100 - 20€

¿Que puedo hacer?

Gracias de antemano.
__________________
------------------------------------------
www.inetmarket.es
  #2 (permalink)  
Antiguo 08/08/2008, 12:45
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Ordenar array

Cita:
Iniciado por chiviwalker Ver Mensaje
Hola tengo un problemilla que no se como resolver.

tengo un array de la siguiente forma:

Código PHP:
$miarray=array();

$miarray[0]=array("id"=>$rowd['id'],"nombre"=>$rowd['nombre'],"valor"=>$rowd['valor']);
$miarray[1]=array("id"=>$rowd['id'],"nombre"=>$rowd['nombre'],"valor"=>$rowd['valor']);
... 
Ahora tengo que ordenarlo para mostarlo de la siguiente forma:
Primero por nombre y despues por valor, pero nombre tiene un problema que son del estilo:
Lienzo 20x30
Lienzo 50x60
Lienzo 100x100 ---> en esto tengo el problema que al ordenarse se pone primero y como el valor es mayor que los otros queda:
Lienzo 100x100 - 20€
Lienzo 20x30 - 10€
Lienzo 50x60 - 15€

Cuando lo que quiero es que quede:
Lienzo 20x30 - 10€
Lienzo 50x60 - 15€
Lienzo 100x100 - 20€

¿Que puedo hacer?

Gracias de antemano.


nose que usaras para ordenarlos, pero, prueba con esta funcion:
Código PHP:
$ordenado sort($array_a_ordenarSORT_STRING); 
hechale un vistazo a la funcion sort();
  #3 (permalink)  
Antiguo 09/08/2008, 02:48
Avatar de chiviwalker  
Fecha de Ingreso: marzo-2004
Ubicación: Alicante
Mensajes: 55
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: Ordenar array

El problema es que es un array multidimensional y el campo "nombre" que quiero ordenar ascendente es una cadena que contiene letras con numeros del estilo:
Lienzo 10x20
Lienzo 50x80
Lienzo 100x150

Es decir, empiezan todos con una misma palabra y solo cambian los numeros de los tamaños y al ordenar el 100 se pone antes que el 20.

Estoy usando la funcion de las FAQ para ordenar arrays:

Código PHP:
function ordenar_array() { 
                      
$n_parametros func_num_args(); // Obenemos el número de parámetros 
                      
if ($n_parametros<|| $n_parametros%2!=1) { // Si tenemos el número de parametro mal... 
                        
return false
                      } else { 
// Hasta aquí todo correcto...veamos si los parámetros tienen lo que debe ser... 
                        
$arg_list func_get_args(); 
                    
                        if (!(
is_array($arg_list[0]) && is_array(current($arg_list[0])))) { 
                          return 
false// Si el primero no es un array...MALO! 
                        

                        for (
$i 1$i<$n_parametros$i++) { // Miramos que el resto de parámetros tb estén bien... 
                          
if ($i%2!=0) {// Parámetro impar...tiene que ser un campo del array... 
                            
if (!array_key_exists($arg_list[$i], current($arg_list[0]))) { 
                              return 
false
                            } 
                          } else { 
// Par, no falla...si no es SORT_ASC o SORT_DESC...a la calle! 
                            
if ($arg_list[$i]!=SORT_ASC && $arg_list[$i]!=SORT_DESC) { 
                              return 
false
                            } 
                          } 
                        } 
                        
$array_salida $arg_list[0]; 
                    
                        
// Una vez los parámetros se que están bien, procederé a ordenar... 
                        
$a_evaluar "foreach (\$array_salida as \$fila){\n"
                        for (
$i=1$i<$n_parametros$i+=2) { // Ahora por cada columna... 
                          
$a_evaluar .= "  \$campo{$i}[] = \$fila['$arg_list[$i]'];\n"
                        } 
                        
$a_evaluar .= "}\n"
                        
$a_evaluar .= "array_multisort(\n"
                        for (
$i=1$i<$n_parametros$i+=2) { // Ahora por cada elemento... 
                          
$a_evaluar .= "  \$campo{$i}, SORT_REGULAR, \$arg_list[".($i+1)."],\n"
                        } 
                        
$a_evaluar .= "  \$array_salida);"
                        
// La verdad es que es más complicado de lo que creía en principio... :) 
                    
                        
eval($a_evaluar); 
                        return 
$array_salida
                      } 
                    } 
Y la llamo de la siguiente forma:

Código PHP:
$miopcion ordenar_array($miopcion'nombre'SORT_ASC'valor'SORT_ASC) or die('<br>ERROR!<br>'); 
Sigo perdido no se como hacerlo. He probado a cambiar en la funcion sort_string y sort_numeric y nada.
__________________
------------------------------------------
www.inetmarket.es
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 10:00.