foreach l oop не показывает результат ясно в формуле гаверсина - PullRequest
1 голос
/ 14 июля 2020

Мой код похож на этот

foreach ($vehicles as $vehicle) {
                $center_lat = $lat;
                $center_lng = $lon;
                $lat=$vehicle->lat;
                $lng=$vehicle->lon;

                $distance = haversineGreatCircleDistance($center_lat, $center_lng, $lat, $lng, 6371);
                print_r($distance);  
            }
return response()->json([$vehicles,$distance]);

он дает мне это

3326.223273082541.763216161968[
    [
        {
            "id": 1,
            .....
        },
        {
            "id": 3,
            .....
        }
    ]
]

Как вы видите, расстояние нечеткое, я хочу, чтобы мой результат был таким

distance from this vehicle:3326.2232730825
[
        [
            {
                "id": 1,
                .....
            },
distance from this vehicle:41.763216161968
            {
                "id": 3,
                .....
            }
        ]
    ]

Я хочу, чтобы каждое расстояние вместе с объектом транспортного средства в json было читаемым

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Простой способ сделать с array_map :

$output = array_map(function ($vehicle) use ($lat, $lon) {
  $vehicle->distance = haversineGreatCircleDistance(
    $lat, $lon, $vehicle->lat, $vehicle->lon, 6371);
  return $vehicle;
}, $vehicles->toArray());

return response()->json($output);

Результат будет примерно таким:

    [
        {
            "id": 1,
            .....
            "distance": 3326.2232730825
        },
        {
            "id": 3,
            .....
            "distance": 41.763216161968
        }
    ]

Примечание: В приведенном выше коде предполагается, что переменная $vehicles - это Eloquent Collection . Если нет, измените $vehicles->toArray() на iterator_to_array($vehicles), должно работать.

1 голос
/ 14 июля 2020

Вы можете добавить расстояние в данные транспортного средства или просто создать новый результат с этими данными, объединенными в l oop ...

$output = [];
foreach ($vehicles as $key => $vehicle) {
    $center_lat = $lat;
    $center_lng = $lon;
    $lat=$vehicle->lat;
    $lng=$vehicle->lon;

    // Add distance into temporary vehicle array
    $vehicle->distance = haversineGreatCircleDistance($center_lat, $center_lng, $lat, $lng, 6371);

    // Add the combined data to an output array
    $output [$key] = $vehicle;
}
// Output new array as result
return response()->json($output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...