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<3 || $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.