Foros del Web » Programando para Internet » PHP »

[APORTE] Ordenar array multidimensional

Estas en el tema de [APORTE] Ordenar array multidimensional en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 21/02/2012, 15:20
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
[APORTE] Ordenar array multidimensional

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 original
  1. function ordena_mat($mat,$col,$aod="ASC"){
  2.     foreach($mat as $k =>$val){//recorre la matriz o array
  3.         if($k!=$col) //si la clave actual ($k) NO es la indicada para ordenar
  4.             $ord[$k]=$val; //guarda en un arreglo temporal asociativo el valor.
  5.         else
  6.             return $mat; //si lo es, regresa la matriz.
  7.     }
  8.  
  9.     if($aod=="ASC") //si el ordenamiento es ASCENDENTE
  10.         arsort($ord); //ordena ascendentemente
  11.     else
  12.         asort($ord);//caso contrario, ordena de forma descendente.
  13.  
  14.     foreach($ord as $k=>$nms)//recorre el arreglo temporal
  15.         $mat2[$k]=$mat[$k];//crea una segunda matriz matriz temporal con los valores de la primera, pero ya ordenados
  16.  
  17.     foreach($mat2 as $k =>$val){//recorre la segunda matriz
  18.         if(is_array($val))//si contiene otra matriz o arreglo
  19.             $val=ordena_mat($val,$col,$aod);//vuelve a llamar a la función ordenar para dicho arreglo
  20.         $mat2[$k]=$val;//y guarda el resultado ordenado en la matriz temporal
  21.     }
  22.     return $mat2;//finalmente regresa la matriz temporal ya ordenada
  23. }
  24. //no creo que falte aclararlo, pero se manda a llamar así:
  25.  
  26. $mi_array=ordena_mat($mi_array,'indice','ASC');
  27. //o
  28. $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
  #2 (permalink)  
Antiguo 21/02/2012, 15:35
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: [APORTE] Ordenar array multidimensional

Ahí va un K++ y gracias por compartir
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(

Etiquetas: multidimensional
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:31.