0

2 つの json オブジェクトのうちの 1 つを受け取る場合があります。この場合は、Google ジオコード API または Places API から取得します。

ジオコーディング API から値にアクセスすると、次のようになります。

$coordinates            = $data->results[0]->geometry->location;
$cache_value['lat'] = (string) $coordinates->lat;
$cache_value['lng'] = (string) $coordinates->lng;

場所の構造もほぼ同じです。

$coordinates            = $data->result->geometry->location;
$cache_value['lat'] = (string) $coordinates->lat;
$cache_value['lng'] = (string) $coordinates->lng;

私のコードでは、それぞれのケースを処理する 2 つの関数がありますが、それらはresultvsresults[0]を除いてほぼ同一であり、それらを結合したいと考えています。変数を渡そうとしましたが、エラーがスローされます:

$result         = ($place) ? 'result' : 'results[0]';
$coordinates    = $data->$result->geometry->location;

以下を与える:

知らせ: Undefined property: stdClass::$result[0]

この質問のタイトルが少し不正確なので、何を達成するための正しい構文と、命名法に関する指針を知りたいです。

4

3 に答える 3

1

ただ行う:

$result         = $place ? $data->result : $data->results[0];
$coordinates    = $result->geometry->location;

あなたのコードが行っていることは次のとおりです。$dataオブジェクトのプロパティを解決しようとしますが、名前results[0]ありません。0繰り返しますが、プロパティのインデックスは解決されませんresultsが、リテラル名を持つプロパティを見つけようとしますresults[0]。オブジェクトが次のように見える場合に機能します。

$obj = (object)array( 'results[0]' => 'hey there' );

何らかの理由でそれで遊びたい場合は、次のようなばかげたプロパティを作成できます: $data->{'results[0]'} = 5;- しかし、それはばかげています。

于 2013-09-30T15:50:10.773 に答える
0

問題は、変数の値ではなく、変数名の参照です。

$result = ($place) ? 'result' : 'results[0]';
$coordinates = $data->$result->geometry->location; 

$resultは単なる文字列であり、 または のいずれかの実際の値である必要があり$data->resultます$data->result[0]

それを修正するには、単純$resultに結果の値を保持するために使用します。

$result = ($place) ? $data->result : $data->results[0];
$coordinates = $result->geometry->location; 
于 2013-09-30T15:52:41.867 に答える
0

php は という名前のキーを探していると思いますが、プロパティ名が であり、コレクションの最初のメンバーが必要であるresults[0]ことを知るほど賢くありませんresults[0]

于 2013-09-30T15:41:06.627 に答える