3

Googleマップのhtml呼び出し(下記)から特定のphp変数に地域名を追加して、1)mysqlデータベースに保存し、2)echoステートメント(echo $locality)の一部として表示できるようにします。

http://maps.googleapis.com/maps/api/geocode/json?latlng=34.11375320612877,-118.35220470764159&sensor=false

json_decode($data,true); を介してjsonデータをデコードしました。声明。

多変数配列構造の複雑さを考えると、特定の値が存在する場合は、掘り下げて引き出したいと思います。説明に役立つ例。

スペースを節約するために省略された json データを次に示します。

{ "results" : [
{
"address_components" : [
{
"long_name" : "2917-2981",
"short_name" : "2917-2981",
"types" : [ "street_number" ]
},
{ "long_name" : " Runyon Canyon Rd",
"short_name" : "Runyon Canyon Rd",
"types" : [ "route" ]
},
{
"long_name" : "Hollywood Hills",
"short_name" :"ハリウッド ヒルズ",
"タイプ" : [ "近所", "政治的" ]
},
{
" long_name" : "ロサンゼルス" ,
"short_name" : "ロサンゼルス",
"types" : [ "locality" , "political" ]
}
....

私のコード:

...
$data = @file_get_contents($url);
$phpresult = json_decode($data,true);
var_dump($phpresult);

var_dump($phpresult) 表示:

array(2) { ["results"]=> array(8) { [0]=> array(4) { ["address_components"]=> array(8) { [0]=> array(3) { [ "long_name"]=> string(9) "2917-2981" ["short_name"]=> string(9) "2917-2981" ["types"]=> array(1) { [0]=> string( 13) "street_number" } } [1]=> array(3) { ["long_name"]=> string(16) "Runyon Canyon Rd" ["short_name"]=> string(16) "Runyon Canyon Rd" [ "types"]=> array(1) { [0]=> string(5) "route" } } [2]=> array(3) { ["long_name"]=> string(15) "Hollywood Hills" ["short_name"]=> string(15) "Hollywood Hills" ["types"]=> array(2) { [0]=> string(12) "neighborhood" [1]=> string(9) "政治的な" } } [3]=> array(3) { ["long_name"]=> string(11) "ロサンゼルス" ["short_name"]=> string(11) "ロサンゼルス" ["types"]= > array(2) { [0]=> string(8) "地方" [1]=> string(9) "political" }...<

/? を検索/解析して変数 $locality に値 "Los Angeles" を格納したいと思います。条件「type = locality」の配列。

コードを使用して情報を見つけたくありません:

echo $phpresult['results'][0]['address_components'][3]['long_name'];

これは、変数が常に 1) 配列内の同じ場所にあり、2) 変数が存在することを前提としているためです。

どんな助けでも本当に感謝しています。私は答えを見つけておらず、おそらくこの主題に関連するすべての投稿を読んだ(しかし完全には理解していない).

よろしくお願いします。

ショーン

4

2 に答える 2

1

次のパターンで preg_match を実行できます。

|"long_name" : "([^"]*)",\r\n"short_name" : "([^"]*)",\r\n"types" : \[ [^\]]*"locality"|

デモ

これは、長い名前がインデックス 1 に、短い名前がインデックス 2 にある 3 つの要素を持つ配列を返します。

またはループを使用します。

foreach($phpresult['results'][0]['address_components'] as $component){
  if(array_search('location', $component['types']) !== false){
    $location = $component['long_name'];
    break;
  }
}

これがハードコーディングされている場合は、別のループを追加してすべての結果を確認できます。

于 2012-08-03T07:39:37.697 に答える
0
foreach($phpresult['results'][0]['address_components'] as $location)
{
    if(in_array("locality" , $location['types']))
    {
        $locality[] = $location['long_name'];
    }
}

print_r($locality);

各場所の配列には、 long_name 、 short_name 、および types の 3 つのキーがあります。型は配列なので、「locality」の値があれば、その場所の をtypes array 取得してlong_name保存します。

EDIT:この関数は、最初のものだけでなく、地域タイプを持つ場所のすべての long_names を保存します。最初の場所の long_name のみを取得するには、. の後に「break」を追加し$locality[] = ...ます。

于 2012-08-03T07:56:39.013 に答える