所以,我还没有看到任何其他答案涉及到这一点,但@xdazz 接近了。
让我们开始我们的环境,$obj
等于解码字符串的对象表示法:
php > $obj = json_decode('{"1":1,"2":2}');
php > print_r($obj);
stdClass Object
(
[1] => 1
[2] => 2
)
php > var_dump( $obj );
object(stdClass)#1 (2) {
["1"]=>
int(1)
["2"]=>
int(2)
}
如果您想访问字符串,我们知道以下操作将失败:
php > echo $obj->1;
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `'{'' or `'$'' in php shell code on line 1
访问对象变量
您可以像这样访问它:
php > echo $obj->{1};
1
这与说:
php > echo $obj->{'1'};
1
访问数组变量
数组的问题是以下返回空白,这是类型转换的问题。
php > echo $obj[1];
php >
如果您将其类型转换回来,该对象将再次可访问:
php > $obj = (object) $obj;
php > echo $obj->{1};
1
这是一个可以为您自动执行上述操作的功能:
function array_key($array, $key){
$obj = (object) $array;
return $obj->{$key};
}
示例用法:
php > $obj = (array) $obj;
php > echo array_key($obj, 1);
1
php > echo array_key($obj, 2);
2