【问题标题】:How to find min&max in array push如何在数组推送中找到最小值最大值
【发布时间】:2016-05-06 06:50:58
【问题描述】:

我正在为 uber 等出租车预订应用程序做一个 api。我正在使用距离矩阵来查找两个纬度和经度之间的距离。在那个单个客户周围有多个司机。我想使用单个客户纬度找到最近的司机和多个驾驶员纬度和经度的经度。如何找到驾驶员的最小和最大距离并根据驾驶员 ID 获取最小和最大值。

下面的代码我用来寻找最近的司机:

<?php
        function GetDrivingDistance($lat1, $lat2, $long1, $long2)
        {
            $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            $response = curl_exec($ch);
            curl_close($ch);
            $response_a = json_decode($response, true);
            $dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
            $time = $response_a['rows'][0]['elements'][0]['duration']['text'];

            return array('distance' => $dist, 'time' => $time);
            //return $distance;
        }

    $cus_latlong_qry="SELECT * FROM customer_position WHERE customer_id='$customer_id'";
    $cus_latlong_exe=mysqli_query($con,$cus_latlong_qry);
    $cus_latlong_res=mysqli_fetch_array($cus_latlong_exe);
    $cus_lat=$cus_latlong_res['latitude'];
    $cus_long=$cus_latlong_res['longtitude'];

$driver_latlong_qry="SELECT * FROM driver_position WHERE driver_type='$_GET[type_id]' AND (booking_status='3' OR booking_status='2') AND active_status='0'";

                $driver_latlong_exe=mysqli_query($con,$driver_latlong_qry);
                $minimumvalue=array();
                $distance=array();
                while($driver_latlong_res=mysqli_fetch_array($driver_latlong_exe))
                {
                    $driv_id=$driver_latlong_res['driver_id'];
                    $driv_lat=$driver_latlong_res['lattitude'];
                    $driv_long=$driver_latlong_res['longtitude'];
                    $dist = GetDrivingDistance($cus_lat,$driv_lat,$cus_long,$driv_long);
                    array_push($distance,$dist);
                }

?>

我如何在数组推送中找到与特定驱动程序 ID 相关的 min&mx 距离..?

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    使用最小值和最大值enter code here

    min($distance[$driv_id]);     
    max($distance[$driv_id]);
    

    【讨论】:

      【解决方案2】:

      简单的逻辑,收集最小值和最大值:

      $drivers = array();    
      
       while($driver_latlong_res=mysqli_fetch_array($driver_latlong_exe))
       {
        $driv_id=$driver_latlong_res['driver_id'];                  
        $driv_lat=$driver_latlong_res['lattitude'];               
        $driv_long=$driver_latlong_res['longtitude']; 
        $dist = GetDrivingDistance($cus_lat,$driv_lat,$cus_long,$driv_long);
      
        array_push($distance[$driv_id], $dist);
      
        $drivers[$driv_id]['min'] = min($distance[$driv_id]);     
        $drivers[$driv_id]['max'] = max($distance[$driv_id]);
      
       }
      
      print_r($drivers);
      

      因此,您将获得 $drivers 数组,其中第一个键是 driver_id,作为第二个键,您将拥有他的最小值和最大值。

      【讨论】:

      • 它给出了错误信息:array_push() 期望参数 1 是数组,给定 null
      • 在推送初始化数组之前$distance[$driv_id] = array();
      • 没有排序发生??数组 ( [HCB-1] => 数组 ( [min] => 14.6 ) [HCB-3] => 数组 ( [min] => 1 ) [HCB-2] => 数组 ( [min] => 16.4 ) )
      • 排序?不,每个驱动程序都有他的最小值。如果您愿意,您可以在循环中回显每个值并进行验证。
      • 如何得到这样的输出:{ "MINIMUM": [{ "min": "3.6", "driverid": "HCB-6" }]}
      猜你喜欢
      • 2021-02-10
      • 2021-03-15
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2019-08-21
      • 1970-01-01
      相关资源
      最近更新 更多