Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/08/2008, 02:48
Avatar de chiviwalker
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