La siguiente función permite ordenar un array multidimensional asociativo. Y cuando digo multidimensional es que realmente ordena arrays irregulares con tantos índices que otros métodos como multisort no funcionan.
La función puede recibir tres parámetros: el array, la columna o índice por la cual se quiere ordenar y opcionalmente el orden, ascendente o descendente. Por defecto ordena de forma ascendente.
Código PHP:
Ver originalfunction ordena_mat($mat,$col,$aod="ASC"){
foreach($mat as $k =>$val){//recorre la matriz o array
if($k!=$col) //si la clave actual ($k) NO es la indicada para ordenar
$ord[$k]=$val; //guarda en un arreglo temporal asociativo el valor.
else
return $mat; //si lo es, regresa la matriz.
}
if($aod=="ASC") //si el ordenamiento es ASCENDENTE
arsort($ord); //ordena ascendentemente else
asort($ord);//caso contrario, ordena de forma descendente.
foreach($ord as $k=>$nms)//recorre el arreglo temporal
$mat2[$k]=$mat[$k];//crea una segunda matriz matriz temporal con los valores de la primera, pero ya ordenados
foreach($mat2 as $k =>$val){//recorre la segunda matriz
if(is_array($val))//si contiene otra matriz o arreglo $val=ordena_mat($val,$col,$aod);//vuelve a llamar a la función ordenar para dicho arreglo
$mat2[$k]=$val;//y guarda el resultado ordenado en la matriz temporal
}
return $mat2;//finalmente regresa la matriz temporal ya ordenada
}
//no creo que falte aclararlo, pero se manda a llamar así:
$mi_array=ordena_mat($mi_array,'indice','ASC');
//o
$mi_array=ordena_mat($mi_array,'indice','DESC');
Posiblemente se pueda optimizar, pero la dejo para los que necesiten una función de ordenamiento y no tengan mucho tiempo para hacer alguna