Ver Mensaje Individual
  #12 (permalink)  
Antiguo 02/05/2009, 09:36
Avatar de Covids0020
Covids0020
 
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: Calcular valores más cercanos en array

Nada, ya lo tengo... el caso es que imaginaba que había algún método de obviar el doble bucle ya que puede ser una array muy pesado. El tema de las coordenadas es lo de menos, como decía la función trabaja con ese valor y debe ser un array. De ese nivel no se pasa.

Pongo el código original -por si alguien ha seguido este despropósito mío :(- a falta de extraer ya lo que quiero. ...con lo fáciles que son a veces las cosas y qué difíciles se empeña uno en hacerlas :(

Código PHP:
Ver original
  1. foreach ( $cpsEnemies['allieds'] as $item ) {
  2.     foreach ( $cpsEnemies['allieds'] as $item2 ) {
  3.         $distance = $wwiiol->distanceBetween($item['coords'], $item2['coords']);
  4.         if ( $distance > 0 )
  5.             $distances[$item['name']][$item2['name']] = $distance;
  6.     }
  7.     asort($distances[$item['name']]);
  8. }
Donde $cpsEnemies['allieds'] era mi array original que puse y el item coords las coordenadas location.

Así tengo un array asociativo de distancias de todos los items respectivamente a cada uno de ellos. Se omite la coparación propia y se ordena de menor a mayor al final del segundo bucle.

Esto me da un array con los nombres de las ubicaciones con otro nivel con los nombres del resto de ubicaciones y la distancia a las mismas. Y ya se puede sacar el item más cercano, tanto ordenando (1er subitem) como sin ordenar.
Código PHP:
array
  
'Marche' => 
    array
      
'Rochefort' => float 42.7442310727
      
'Ciney' => float 80.7580532021
      
'Wellin' => float 86.9506102796
      
'Libin' => float 99.0115294297
      
'Gedinne' => float 159.044804684
      
'Namur' => float 176.47504293
      
'Hannut' => float 199.166194847
      
'Eghezee' => float 202.551874175
...
  
'Damvillers' => 
    array
      
'Verdun' => float 74.3862663265
      
'Stenay' => float 86.2978395384
      
'Buzancy' => float 146.65572847
      
'LeChesne' => float 212.947478607
      
'Libin' => float 257.902556211
... 
---
Muchas gracias Adell, en serio ;)
A veces, no es que salga o deje de salir la solución, pero pensarlo y hablarlo con alguien hace que salgan las ideas. Es justamente lo que buscaba. Lo dicho, un saludo ;)
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 02/05/2009 a las 09:49