Hello,

Alors voila, je suis le cours sur le PHP et j'en suis a la section curl.
J'arrive a mettre en place curl suivant le tuto.

$curl = curl_init('api.openweathermap.org/data/2.5/weather?q=London&appid={APIKEY}');
        curl_setopt_array($curl,[
            CURLOPT_TIMEOUT => 1,
            CURLOPT_RETURNTRANSFER => true
        ]);
 $data = curl_exec($curl);

Ensuite, j'utilise json_decode($data,true) pour avoir la ressource sous forme de tableau :

array(13) {
  ["coord"]=>
  array(2) {
    ["lon"]=>
    float(-0.1257)
    ["lat"]=>
    float(51.5085)
  }
  ["weather"]=>
  array(1) {
    [0]=>
    array(4) {
      ["id"]=>
      int(804)
      ["main"]=>
      string(6) "Clouds"
      ["description"]=>
      string(15) "overcast clouds"
      ["icon"]=>
      string(3) "04n"
    }
  }
  ["base"]=>
  string(8) "stations"
  ["main"]=>
  array(6) {
    ["temp"]=>
    float(283.29)
    ["feels_like"]=>
    float(278.43)
    ["temp_min"]=>
    float(282.59)
    ["temp_max"]=>
    float(284.26)
    ["pressure"]=>
    int(1002)
    ["humidity"]=>
    int(76)
  }
  ["visibility"]=>
  int(10000)
  ["wind"]=>
  array(2) {
    ["speed"]=>
    float(5.66)
    ["deg"]=>
    int(220)
  }
  ["clouds"]=>
  array(1) {
    ["all"]=>
    int(90)
  }
  ["dt"]=>
  int(1611074228)
  ["sys"]=>
  array(5) {
    ["type"]=>
    int(1)
    ["id"]=>
    int(1414)
    ["country"]=>
    string(2) "GB"
    ["sunrise"]=>
    int(1611042930)
    ["sunset"]=>
    int(1611073597)
  }
  ["timezone"]=>
  int(0)
  ["id"]=>
  int(2643743)
  ["name"]=>
  string(6) "London"
  ["cod"]=>
  int(200)
}

Et la commence mon problème.
Je souhaite extraire certaines données de mon tableau $data.
Par exemple pour obtenir la valeur ['lon'] ou ['lat'] contenue dans la clé ['coord'], je sais que je peux faire tout simplement :

echo $data['coord']['lat'];

Néanmoins je souhaiterais parcourir mon tableau afin de pouvoir extraires les données.

J'essaye donc :

$array = [];
foreach($data['coord'] as $coord){
    $array[] = [
    'latitude'=>$coord['lat'],
    'longitude'=>$coord['lon']
    ];
}

Mais ça me retourne une erreur : Notice: Trying to access array offset on value of type float.
Après plusieurs syntaxe et recherche, je n'arrive toujours pas a comprendre mon erreur ni comment m'y prendre.

Du coup si quelqu'un pourrait m'apporter ses lumières, sa serait méga cool car la je ne sais vraiment plus quoi faire ^^.

Merci pour vos réponses ;)

3 réponses


Never
Réponse acceptée

Bonjour,

Tu essayes de boucler sur un tableau qui n'a pas les valeurs "lat" et "lon". Ta bloucle rentre déjà dans le tableau coords mais ce tableau ne contient pas de sous-tableau.

foreach( $data['coord'] as $coord_key => $coord ){
    echo '<pre>' . print_r( $coord, true ) . '</pre>'; // Ceci retourne les valeurs de "lat" et "lon"
}

Le code ci-dessous te permettra de populer ton tableau avec les clés et les valeurs du tableau coord

$array = [];
foreach( $data['coord'] as $coord_key => $coord ){
    $array[$coord_key] = $coord_value;
}

En espérant t'avoir aidé

ReckEx
Auteur

Bonjour Never,

Merci pour ta réponse car c'était le comportement que je cherché à mettre en place.
Sujet résolu =)

Tu peux signaler la réponse comme étant celle qui a résolu ton problème, pour aider les futurs lecteurs à trouver plus rapidement la solution ;)