Как создать свойство «промежуточное звено» для метода CompeRoutes?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как создать свойство «промежуточное звено» для метода CompeRoutes?

Сообщение Anonymous »

Я пытаюсь преобразовать динамический массив PHP в формат, необходимый для объекта JSON. Это запрос на завивку к ComputeRoutes Google.
По сути, для ComputeRoutes Google требуется, чтобы объект JSON содержал несколько пар ключей с точным именем ключа.
Ниже приведен формат:

Код: Выделить всё

    "intermediates": [
{
"location":{
"latLng":{
"latitude": 51.4903,
"longitude": -0.138728
},
"latLng":{
"latitude": 51.4903,
"longitude": -0.138728
}
}

}
], "travelMode": "DRIVE",
Как видите, он включает в себя следующее:
  • "Промежуточный ключ" содержит массив/объект

    Код: Выделить всё

    object [{}]
    
  • Ключ местоположения содержит объект, а затем несколько ключей «ключ:объект» с тем же именем ключа.

    Код: Выделить всё

     {
    key:{}
    key:{}
    }
    
Ниже приведен динамически создаваемый массив PHP, который я создал для имитации вышеописанного:

Код: Выделить всё

    $array  = "intermediates" =>

array:1 [
0 => array:1 [
"location" => array:5 [
0 => array:1 [
"latLng" => array:2 [
"latitude" => 52.209291
"longitude" => 0.136872
]
]
1 => array:1 [
"latLng" => array:2 [
"latitude" => 55.603582
"longitude" => 11.973337
]
]
]
]
]
]

DD(json_encode($array,true));
Однако json_encode не преобразует массив в требуемый формат, ниже показан результат json_encode.

Код: Выделить всё

{"intermediates":[
{"location":[
{"latLng":{"latitude":52.209291,"longitude":0.136872}},
{"latLng":{"latitude":55.603582,"longitude":11.973337}},
{"latLng":{"latitude":51.361759,"longitude":-0.89988}},
{"latLng":{"latitude":51.455168,"longitude":-2.617619}},
{"latLng":{"latitude":55.950803,"longitude":-3.202121}}
]
}
]
}
Проблема в том, что ключ местоположения создает массив, хотя он должен быть объектом.
Затем для каждого ключа latLing мы создаем новый объект, хотя на самом деле это пара ключ:объект.
Вот как я построил массив:

Код: Выделить всё

public $intermediates =[];

foreach(datas as data){
$this->intermediates['location'][]['latLng'] =['latitude' =>data['latitude'], 'longitude' => data['longitude'];

}
и наконец:

Код: Выделить всё

'intermediates' =>  [$this->getIntermediates()],
Можно ли точно имитировать объект JSON? Если да, то как это можно сделать?
Я получил информацию о том, что Google требует две записи с одним и тем же ключом из этого авторитетного источника, и это цитата:

Вы также можете использовать Routes API для добавления нескольких путевых точек
(промежуточных остановок)

Затем автор приводит пример того, как вы можете добавить несколько путевых точек в свой JSON API:

Код: Выделить всё

   Headers
Content-Type: application/json
X-Goog-Api-Key: YOUR_API_KEY
X-Goog-FieldMask: routes.duration,routes.distanceMeters, routes.legs

{
"origin": {
"address": "7 Leedon Heights, Singapore 267953"
},
"destination": {
"address": "Jewel Changi Airport, Singapore"
},
"intermediates": [
{
"address": "Marina Bay Sands Singapore, 10 Bayfront Ave, Singapore 018956"
},
{
"address": "Jurong East, Singapore"
}
],
"travelMode": "DRIVE",
"polylineQuality": "HIGH_QUALITY",
"extraComputations": "TRAFFIC_ON_POLYLINE",
"routingPreference": "TRAFFIC_AWARE",
"departureTime": "2025-02-24T01:00:00Z"
}
Я проверил вышеизложенное, используя статический код, и это действительно работает.


Подробнее здесь: https://stackoverflow.com/questions/798 ... tes-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»