2017-03-07 2 views
0

私は、複数のアドレスで最良の距離を計算するためにGoogleマトリックスを使用しています。 私は、私が試してみました(このexempleのIDが「4」である)私は短い距離のIDを表示したい配列を小さくすると、距離が小さく戻り値が返されます。

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

     ) 

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

     ) 

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

     ) 
    ) 

APIによって

を小さな距離 マイ配列リターンの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']; 

このコードは機能しません、なぜ私は分かりません! あなたのアイデア.... Thxを

答えて

0

使用このコード

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

を持っている場合、それはあなたが配列の最初の要素を選ぶことができ、このソートされた配列から、距離の降順順序であなたの配列をソートします。

これがあなたを手伝ってくれることを願っています!

+0

'km'キーは、文字列値を保持し、気配りも。 – marmeladze

+0

私はすべてのソリューションをテストしましたが、私は同じ問題を抱えています。最初の結果は "ID = 12と833km"と表示されます – Mike

+0

問題は解決しました。 – Mike

0

通常のソートでは、結果が得られます。

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

$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 
) 
関連する問題