2011-05-15 8 views
2

에서 배열을 살펴 봅니다. 다음과 같은 문제가 있습니다. 아래 예제와 같이 항상 n 개의 요소가있는 배열을 반환하는 동적 쿼리가 있습니다.좌표 (php)

 
Array 
(
    [0] => Array 
     (
      [gid] => 311 
      [length] => 408.804653251745 
      [start_point] => POINT(261675 9196115) 
      [end_point] => POINT(261977.5 9196357.5) 
    ) 
    [1] => Array 
     (
      [gid] => 312 
      [length] => 4304.33549546129 
      [start_point] => POINT(259885 9193105) 
      [end_point] => POINT(261675 9196115) 
    ) 
    [2] => Array 
     (
      [gid] => 313 
      [length] => 7470.68109219034 
      [start_point] => POINT(262855 9190095) 
      [end_point] => POINT(261675 9196115) 
    ) 
    [3] => Array 
     (
      [gid] => 314 
      [length] => 1926.81240867132 
      [start_point] => POINT(264465 9190755) 
      [end_point] => POINT(262855 9190095) 
    ) 
    [4] => Array 
     (
      [gid] => 315 
      [length] => 1828.52813742386 
      [start_point] => POINT(264215 9189275) 
      [end_point] => POINT(262855 9190095) 
    ) 
) 

start_points와 end_points를 비교하여 배열을 분석하는 함수를 만들어야합니다. 그들이 요소가 동일한 경우, 길이는 다음과 같이, 새로운 배열에 축적되어, 좌표에서 연락 있습니다 내가 5를 구성 할 수 바랍니다

 
Array 
(
    [0] => Array 
     (
      [river_1] => "311" 
      [total_length] => 408.804653251745 
     ) 
    [1] => Array 
     (
      [river_2] => "311,312" 
      [total_length] => 4713.140148713 
     ) 
    [2] => Array 
     (
      [river_3] => "311,313" 
      [total_length] => 7879.485745442 
     ) 
    [3] => Array 
     (
      [river_4] => "311,313,314" 
      [total_length] => 9806.298154113 
     ) 
    [4] => Array 
     (
      [river_5] => "311,313,315" 
      [total_length] => 9708.013882866 
     ) 

) 

은 무엇 관심 날 것이 긴 길이 (river_4)의 강이다 강하. 사진보기 : https://picasaweb.google.com/benigno.marcello/Duvida?feat=directlink. 배열의 강은 노란색으로 표시됩니다 (유역 내). 누구든지 나를 도울 수 있습니까? 사전에

감사합니다,

답변

2

조금 더러운하지만이 작동합니다 :

// Source array (this should already be set) 
$river_data; 

// Results array 
$result_data = array(); 

foreach ($river_data as $river) { 
    // Clear this out just in case 
    $current_river = null; 
    $current_river = array('gid' => $river['gid'], 
        'total_length' => $river['length']); 

    // Compare to everything but ourselves 
    foreach ($river_data as $second_river) { 
     if ($river['end_point'] == $second_river['start_point']) { 
      $current_river['gid'] = $current_river['gid'] . ',' . $second_river['gid']; 
      $current_river['total_length'] = $current_river['total_length'] + $second_river['length']; 
     } 
    } 

    // Add our compound river to the results array 
    $result_data[] = array('river_' . (count($result_data)+1) => $result_data['gid'], 
        'total_length' => $result_data['total_length'); 
}