0

我有一个案例,我可以接收两个 json 对象之一,在这种情况下,来自 google geocode 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;

在我的代码中,我有两个函数来处理每种情况,但是除了resultvs之外,它们几乎是相同的results[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]0resultsresults[0]

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

如果出于任何原因您想使用它,您可以创建一个像这样的愚蠢属性:$data->{'results[0]'} = 5;-但这很愚蠢,不要那样做:)

于 2013-09-30T15:50:10.773 回答
0

我相信 php 正在寻找一个名为 的键results[0],它不够聪明,无法知道属性名称是results并且您想要集合的第一个成员[0]

于 2013-09-30T15:41:06.627 回答
0

问题是变量名的引用,而不是它的值。

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

$result只是一个字符串,应该是$data->resultor的实际值$data->result[0]

要更正它,只需使用$result来保存结果的值。

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