2017-03-07 4 views
0

나는 여러 주소와 최고의 거리를 계산하기 위해 Google 매트릭스를 사용합니다. 나는배열은 작은 거리를 찾아 반환 ID를

$com = Array(
     [0] => Array  (
      [id] => 12 
      [km] => 833 km 

     ) 

     [1] => Array  (
      [id] => 4 
      [km] => 546km 

     ) 

     [1] => Array  (
      [id] => 45 
      [km] => 1200km 

     ) 
    ) 

나는 작은 거리의 ID를 표시하려는 API에 의해 내 배열 리턴 (이 exemple를 위해이 ID가 "4"입니다)

내가 시도 작은 거리의 ID를 표시합니다 이 :

$min = array_reduce($commercant, 
         function ($min, $item) { 
          if ($item['km'] < $min['km']) { 
          return $item; 
          } 
          return $min; 
         }, 
         array('id' => -1, 'km' => PHP_INT_MAX)); 
echo $min['id']; 

이 코드는 작동하지 않으며 이유를 모르겠습니다! 당신은 아이디어 .... 들으

답변

0

사용이 코드

usort($com, function($a, $b) { 
     return $a['km'] - $b['km']; 
    }); 
    echo !empty($com[0]['id']) ? $com[0]['id'] : ""; 

가이 정렬 된 배열에서 당신은 배열의 첫 번째 요소를 선택할 수 있습니다, 거리의 내림차순 순서대로 배열을 정렬한다있는 경우.

희망이 도움이 될 것입니다!

+0

http://php.net/manual/en/function.usort.php

는'km' 키 문자열 값을 보유하고, 세심. – marmeladze

+0

모든 솔루션을 테스트했지만 동일한 결과가 나타남 "ID = 12 및 833km" – Mike

+0

문제가 해결됨, KM 제거 Pfff 간단함, 감사합니다. – Mike

0

일반 정렬을 사용하면 결과를 얻을 수 있습니다.

$x = [ 
     ['id' => 12, 'km' => '833km'], 
     ['id' => 4, 'km' => '546km'], 
     ['id' => 45, 'km' => '1200km'] 
    ]; 

function cmp_by_kms($arr1, $arr2) { 

$km1 = intval($arr1['km']); 
$km2 = intval($arr2['km']); 
if ($km1 == $km2) { return 0; } 
return ($km1<$km2) ? -1 : 1; 
} 
usort($x, "cmp_by_kms"); 
print_r($x[0]); 

#=> Array 
(
    [id] => 4 
    [km] => 546km 
)