Foros del Web » Programando para Internet » PHP »

Ordenar Array por proximidad al 0

Estas en el tema de Ordenar Array por proximidad al 0 en el foro de PHP en Foros del Web. Hola a todos, voy a tratar de ser lo más claro posible con lo que necesito. Tengo un array: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ...
  #1 (permalink)  
Antiguo 05/06/2012, 19:35
Avatar de MaTyS  
Fecha de Ingreso: enero-2009
Ubicación: Mar del Plata
Mensajes: 220
Antigüedad: 15 años, 3 meses
Puntos: 18
Ordenar Array por proximidad al 0

Hola a todos,

voy a tratar de ser lo más claro posible con lo que necesito.

Tengo un array:
Código PHP:
Ver original
  1. $array = array(
  2.   'BS' => '-1.45545',
  3.   'MV' => '-6.344',
  4.   'MD' => '6.2129',
  5.   'ST' => '1.2234'
  6. );

La idea es ordenarlos para que queden cuanto más cerca del 0 más bajo sera el indice. Entonces tendría que quedar:
Código PHP:
Ver original
  1. $array = array(
  2.   'ST' => '1.2234',
  3.   'BS' => '-1.45545',
  4.   'MD' => '6.2129',
  5.   'MV' => '-6.344'
  6. );

Trate de ordenarlo con ksort y krsort, pero no da resultados, ¿alguna idea?

Desde ya agradezco su tiempo,
saludos!
  #2 (permalink)  
Antiguo 05/06/2012, 21:26
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Ordenar Array por proximidad al 0

Una manera que se me ocurre de hacerlo es pasando todos los elementos a positivo, y luego ordenar el array.

así:

Código PHP:
Ver original
  1. //Función que transforma valores en positivo
  2. function toAbs(&$element, $key){
  3.     $element = abs($element);
  4. }
  5.  
  6. //Este es tu array original sin ordenar
  7. $array_original = array(...);
  8.  
  9. //Este array lo manipularemos y ordenaremos parar traer los indices ordenados
  10. $copia_array = $array_original;
  11.  
  12. //Convertir todos los valores de la copia del array en positivos
  13. array_walk($copia_array, 'toAbs');
  14.  
  15. //ordenar el array con valores positivos
  16. asort($copia_array);
  17.  
  18. //obtener los indices del array ordenado para acceder a su valor correspondiente en el array original
  19. $sorted_index = array_keys($copia_array);
  20.  
  21. //en este ciclo recorro los valores ordenados
  22. foreach($sorted_index as $index){
  23.     echo $array_original[$index] . "\n";
  24. }
  25.  
  26. //FIN


No se me ocurre otra manera de hacerlo xD!

si usas una versión de PHP 5.3 o superior también puedes mandar la función como anónima al array_walk

Código PHP:
Ver original
  1. array_walk($array_copia, function(&$element, $key){
  2.     $element = abs($element);
  3. });


Ojala sea de ayuda esta info. saludos y suerte.
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)
  #3 (permalink)  
Antiguo 06/06/2012, 05:45
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Ordenar Array por proximidad al 0

Otra opción podría ser utilizar el abs directamente en la función de ordenación, algo así:

Código PHP:
Ver original
  1. uasort($array, function($a, $b) {
  2.     $a = abs($a);
  3.     $b = abs($b);
  4.     return $a == $b ? 0 : $a < $b ? -1 : 1;
  5. });

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
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 19:51.