2016-05-06 5 views
0

Я делаю api для приложения бронирования такси, такого как uber.Я использую distancematrix, чтобы найти расстояние между двумя широтами и долготой. В этом единственном клиенте есть несколько драйверов вокруг него. Я бы хотел найти ближайшего водителя, используя единую широту и долготу клиента по широте и долготе нескольких водителей. Как я могу найти min & максимальное расстояние от водителя и получить min & максимальное значение на основе идентификатора драйвера.Как найти min & max в массиве push

Ниже кода я использую, чтобы найти ближайший драйвер:

<?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); 
       } 

?> 

здесь, как я могу найти минимальное расстояние & МХ в массиве толчке по отношению к определенному идентификатору драйвера .. ??

ответ

0

Простая логика, собирать мин значения & макс:

$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, а в качестве второго ключа вы будете иметь минимум и максимум значения для него.

+0

это дает сообщение об ошибке: array_push() ожидает параметр 1, чтобы быть массивом, нуль дан –

+0

до нажатия инициализации массива '$ расстояния [$ driv_id] = массив(); ' – Fiil

+0

нет сортировки бывают ?? Массив ( [HCB-1] => Массив ( [мин] => 14,6 ) [HCB-3] => Массив ( [мин] => 1 ) [HCB-2 ] => Массив ( [min] => 16.4 ) ) –

0

использование мин & макс enter code here

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