【问题标题】:Array reduce find the small distance and return id数组 reduce 找到小距离并返回 id
【发布时间】:2017-07-27 06:56:02
【问题描述】:

我使用谷歌矩阵来计算多个地址的最佳距离。 我想显示一小段距离的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'];

此代码不起作用,我不知道为什么! 如果你有一个想法...... 谢谢

【问题讨论】:

    标签: arrays reduce


    【解决方案1】:

    使用此代码

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

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

    希望对您有所帮助!

    【讨论】:

    • km key 保存字符串值,注意。
    • 我已经测试了所有解决方案,但我遇到了同样的问题,第一个结果显示“ID=12 and 833km”
    【解决方案2】:

    通过普通的排序,你可以达到结果。

    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
     )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多