PHP使用foreach

时间:2018-05-30 17:25:21

标签: php json foreach google-places-api geocoding

我一直在按照本指南使用两个不同的API创建一个应用程序,但指南很旧,因此其中一个API不像指南那样工作。我试图从谷歌地理编码API中获取坐标并将它们粘贴到Places for Web中。我是PHP的新手,所以我按照指南的示例来遍历一个JSON对象但是整夜都试图让它工作。 以下是地方搜索API

中的JSON对象
{  
"html_attributions":[  ],
"results":[  
  {  
     "geometry":{  },
     "icon":"https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
     "id":"d4b0fb0f7bf5b2ea7df896a0c120a68efae039cf",
     "name":"Guadalajara Mexican Grill & Cantina",
     "opening_hours":{  },
     "photos":[  
        {  
           "height":2952,
           "html_attributions":[  ],
           "photo_reference":"CmRaAAAAfO4JKUaO8vCFM2dcu5LMu4mA4_HXQGJ1FyAnyJUre_kD6VOWiQj7tBEECx4AAct5AORIKipSYWg-Zprjlf8o-SFd7mBRGMXMVMwodFZ5KMLwPYPUhBnTTehGPkb9275pEhCkAqMwfmK29vYenk1wdwFvGhSIHR8ch6FONc99tGn4rVnesbuteg",
           "width":5248
        }
     ],
     "place_id":"ChIJ27es4SWa3IARcvjmt3xL2Aw",
     "price_level":2,
     "rating":4.4,
     "reference":"CmRRAAAA7Rx-l7juDX-1or5dfpK6qFcZ0trZ9cUNEUtKP2ziqHb2MhOE6egs-msJ2OdFKEuHhuNe-3Yk6yxUYwxCBqhDT3ci8pYZI4xYhPGyyDgDenbEU_8k84JiEtCGvj4bdIR0EhDR2Pqte5_kDUcCC9PJFVknGhQomvD4d7NBIhCFxI4i2iEc0w9UiA",
     "scope":"GOOGLE",
     "types":[  ],
     "vicinity":"105 North Main Street, Lake Elsinore"
  },
  {  },
  {  },
  {  },
  {  },
  {  },
  {  },
  {  },
  {  },
  {  },
  {  },
  {  },
  {  },
  {  }
],
"status":"OK"
}

我想把所有的照片引用抓到一个数组中?,然后将它们插入google的Place Photos API。以下是我的尝试:

更新

<?php 
if(!empty($_GET["location"])){
    //$API_key = "";
    $maps_url = 'https://' .
    'maps.googleapis.com/' .
    'maps/api/geocode/json' .
    '?address=' . urlencode($_GET['location']) .
    '&key=';



    $maps_json = file_get_contents($maps_url);
    $maps_array = json_decode($maps_json, true);

    $lat = $maps_array['results'][0]['geometry']['location']['lat'];
    $lng = $maps_array['results'][0]['geometry']['location']['lng'];

    $places_url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?' .
    'location=$lat,$lng' .
    '&radius=1500' .
    '&rankby=distance' .
    '&key=';

    $places_json = file_get_contents($places_url);
    $places_array = json_decode($places_json, true);

    if (!empty($places_array)) {
    foreach ($places_array as $item) {
        var_dump($places_array );
    }
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
 <title>What is Here?</title>
  </head>
  <body>
 <h1>Type in a location</h1>
 <p>This program will display pictures of places to go in that area</p>

  <form action ="">
  <input type ="text" name ="location"/>
  <button type ="submit">Go!</button>
  </form>
  <br/>
  <?php
    echo "$lat $lng";
  ?>

似乎无法让foreach循环做任何事情

2 个答案:

答案 0 :(得分:1)

$lat,$lng变量或API调用是您的第一个问题,而foreach循环是第二个问题。

json_decode($someJSON, true);从您的json创建一个关联数组,因此您不能使用->箭头,这些箭头用于对象。 More about this。 没有$item->photo_reference,请使用:

$results = $places_array["results"];

foreach ($results as $item) {
    echo $item["photos"]["photo_reference"];
}

答案 1 :(得分:0)

无效请求表示错误的url或错误的参数 如果$ lat和$ lng是变量,那么插值不能用单引号尝试使用这样的双引号  “location = $ lat,$ lng”

$places_url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?' .
"location=$lat,$lng" .
'&rankby=distance' .
'&key=mykey';

你应该删除你不能在文档上得到它的半径或距离 https://developers.google.com/places/web-service/search?hl=en-419

这是我修改后的代码,可以在localhost上运行,请注意$ contextOptions,你不应该在你的代码上复制它这是一个解决方法,使file_get_contents在我的机器上工作

之后,foreach应该很容易,因为只是一个数组查看代码

 $thelocation = "1600+Amphitheatre+Parkway,+Mountain+View,+CA";
$thekey = "someapikey";
$maps_url = 'https://' .
        'maps.googleapis.com/' .
        'maps/api/geocode/json' .
        '?address=' . urlencode($thelocation) .
        '&key=' . $thekey;

$contextOptions = array(
 "ssl" => array(
 "verify_peer"      => false,
 "verify_peer_name" => false,
 ),
);

$maps_json = file_get_contents($maps_url, 0, stream_context_create($contextOptions));// file_get_contents($maps_url);
$maps_array = json_decode($maps_json, true);

$lat = $maps_array['results'][0]['geometry']['location']['lat'];
$lng = $maps_array['results'][0]['geometry']['location']['lng'];

$places_url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?' .
        "location=$lat,$lng" .
        '&rankby=distance' .
        '&key='.$thekey;
//https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&rankby=distance&key=
$places_json = file_get_contents($places_url,0, stream_context_create($contextOptions));
$places_array = json_decode($places_json, true);

if (!empty($places_array)) {


 foreach ($places_array["results"] as $item) {

        echo $item["name"]."<br>";

    }
}

这打印....轻松

AVEonline.co
KRAV MAGA GLOBAL WORLD MAP
Mark Carvalho
Amyan
Moving the Planet
Sosta in Camper
NosCode
GLOBAL BUZZ
OptiClean
JI-SU TELECOM
Reel Thrillz
Clío Reconstrucción Histórica
AprimTek
Hayjayshop
NHAV
gitanos.cat
Being Digitall
Directory+
AdExperts
Optical Spectroscopy and Nanomaterials Group