数组减少查找小距离并返回id

时间:2017-03-07 06:52:04

标签: arrays reduce

我使用谷歌矩阵计算多个地址的最佳距离。 我希望显示一个小距离的id 我的数组通过API返回

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

        )

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

        )

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

        )
    )

我想显示小距离的ID(对于这个例子,id是“4”)

我试过这个:

 $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

2 个答案:

答案 0 :(得分:0)

使用此代码

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

它将按照距离的desc顺序对数组进行排序,从这个排序的数组中你可以选择数组的第一个元素。

希望这会对你有所帮助!

答案 1 :(得分: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
 )
相关问题