我有一个案例,我可能会收到两个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;
在我的代码中,我有两个函数来处理每个案例,但除了result
vs results[0]
之外,它们几乎是理想的,我想将它们组合起来。我试图传递一个变量,但它会抛出错误:
$result = ($place) ? 'result' : 'results[0]';
$coordinates = $data->$result->geometry->location;
给出以下内容:
通知 : Undefined property: stdClass::$result[0]
我想知道正确的语法,以及后面的内容,以及关于nominclature的任何指示,因为我担心这个问题标题有点不合适。
答案 0 :(得分: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;
- 但它是愚蠢的,不要这样做:)
答案 1 :(得分:0)
我相信php正在寻找一个名为results[0]
的密钥,它不够聪明,知道属性名称是results
而你想要集合的第一个成员[0]
答案 2 :(得分: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;