我有一个将数字键作为字符串类型的PHP数组。
但是当我尝试访问它们时,PHP给了我一个未定义的索引错误。
$a = (array)json_decode('{"1":1,"2":2}'); var_dump($a); var_dump(isset($a[1])); var_dump(isset($a["1"])); var_dump($a[1]); var_dump($a["1"]);
输出:
数组(大小= 2) '1'=>整数1 '2'=>整数2 布尔值false 布尔值false 错误:E_NOTICE:未定义的偏移量:1 空值 错误:E_NOTICE:未定义的偏移量:1 空值
如何访问这些值?
演示:http://codepad.viper-7.com/8O03IM
因此,我还没有看到其他答案可以解决这个问题,但是@xdazz接近了。
让我们开始我们的环境,它$obj等于已解码字符串的对象表示法:
$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