[RESOLU] Extraire données d'un GROS ARRAY

Gandhi
Invité n'ayant pas de compte PHPfrance

21 déc. 2016, 12:59

Bonjour à tous !

Je suis en cours de développement d'une passerelle entre un logiciel et un site.
Pour celle ci, j'ai besoin, a partir d'une adresse postale, de trouver les coordonnées GPS.
J'ai utilisé l'API Google et jusqu'ici tout roule.
J'obtiens un gros array() avec dedans la latitude et la longitude.

Mais ...

Je n'arrive pas a extraire ma donnée du array :(

Voici le beau tableau :

Code : Tout sélectionner

object(stdClass)#28 (2) { ["results"]=> array(1) { [0]=> object(stdClass)#30 (5) { ["address_components"]=> array(5) { [0]=> object(stdClass)#31 (3) { ["long_name"]=> string(6) "Vérin" ["short_name"]=> string(6) "Vérin" ["types"]=> array(2) { [0]=> string(8) "locality" [1]=> string(9) "political" } } [1]=> object(stdClass)#32 (3) { ["long_name"]=> string(5) "Loire" ["short_name"]=> string(5) "Loire" ["types"]=> array(2) { [0]=> string(27) "administrative_area_level_2" [1]=> string(9) "political" } } [2]=> object(stdClass)#33 (3) { ["long_name"]=> string(21) "Auvergne-Rhône-Alpes" ["short_name"]=> string(21) "Auvergne-Rhône-Alpes" ["types"]=> array(2) { [0]=> string(27) "administrative_area_level_1" [1]=> string(9) "political" } } [3]=> object(stdClass)#34 (3) { ["long_name"]=> string(6) "France" ["short_name"]=> string(2) "FR" ["types"]=> array(2) { [0]=> string(7) "country" [1]=> string(9) "political" } } [4]=> object(stdClass)#35 (3) { ["long_name"]=> string(5) "42410" ["short_name"]=> string(5) "42410" ["types"]=> array(1) { [0]=> string(11) "postal_code" } } } ["formatted_address"]=> string(20) "42410 Vérin, France" ["geometry"]=> object(stdClass)#36 (4) { ["bounds"]=> object(stdClass)#37 (2) { ["northeast"]=> object(stdClass)#38 (2) { ["lat"]=> float(45.4728579) ["lng"]=> float(4.757131) } ["southwest"]=> object(stdClass)#39 (2) { ["lat"]=> float(45.447078) ["lng"]=> float(4.728957) } } ["location"]=> object(stdClass)#40 (2) { ["lat"]=> float(45.454461) ["lng"]=> float(4.753024) } ["location_type"]=> string(11) "APPROXIMATE" ["viewport"]=> object(stdClass)#41 (2) { ["northeast"]=> object(stdClass)#42 (2) { ["lat"]=> float(45.4728579) ["lng"]=> float(4.757131) } ["southwest"]=> object(stdClass)#43 (2) { ["lat"]=> float(45.447078) ["lng"]=> float(4.728957) } } } ["place_id"]=> string(27) "ChIJ8TZdfoYe9UcR8AToy688CQQ" ["types"]=> array(2) { [0]=> string(8) "locality" [1]=> string(9) "political" } } } ["status"]=> string(2) "OK" }
Quelqu'un aurait il une piste SVP ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 déc. 2016, 13:29

salut,

c'est un objet php standard qui contient des propriétés donc un tableau (results est un tableau).

du coup je pense que ce que tu cherches est dans
<?php
// latitude
$json->results[0]->geometry->location->lat
// longitude
$json->results[0]->geometry->location->lng
cela doit te fournir la position 'centrale'.
après tu as les point nord-est et sud- ouest dasn "bounds" et "viewport".

je te conseil d'utiliser un débogueur pour "naviguer" dans l'object à ta guise et comprendre pourquoi tu as cette affichage.
tu peux aussi utiliser la fonction var_dump sur tout un tas de variable avec des tableaux, des objets ou autres types natif afin de te familiariser avec cet affichage des variables.
c'est relativement clair
- object(stdClass) : c'est un objet de type stdClass (classe standard que php utilise pour ces construction d'objet si on ne lui donne pas un objet à utiliser).
- array(1) : un tableau à une seule case
- float(45.447078) nombre à virgule (ici c'est 45,447078)
- string(11) : une chaîne de 11 caractère
etc.

après c'est surement quelque par dans la doc de l'api que tu utilises ?

@+
Modifié en dernier par moogli le 21 déc. 2016, 18:28, modifié 1 fois.
Raison : correction propriété lng
Il en faut peu pour être heureux ......

Gandhi
Invité n'ayant pas de compte PHPfrance

21 déc. 2016, 15:01

Un immense Merci pour l'aide !!!
ça marche nickel !

Au cas ou quelqu'un voudrais s'en servir je met le code entier :

Code : Tout sélectionner

// Mes variables $apikey = "ma cle api"; $rue = "ma rue"; $zip_code = "code postale"; $city = "ville"; // On prépare l'adresse à rechercher $adresse = $rue; $adresse .= ', '.$zip_code; $adresse .= ', '.$city; // On prépare l'URL du géocodeur $geocoder = "https://maps.googleapis.com/maps/api/geocode/json?key=".$apikey."&address=%s&sensor=true"; // Pour cette exemple, je vais considérer que ma chaîne n'est pas // en UTF8, le géocoder ne fonctionnant qu'avec du texte en UTF8 $url_address = utf8_encode($adresse); // Penser a encoder votre adresse $url_address = urlencode($url_address); // On prépare notre requête $query = sprintf($geocoder,$url_address); // On interroge le serveur $results = file_get_contents($query); // On enregistre le résultat $tableaulatlong = json_decode($results); $latitude = $tableaulatlong->results[0]->geometry->location->lat; $longitude = $tableaulatlong->results[0]->geometry->location->lng;
Et voilà :)