访问由json_decode生成的结果中以整数开头的变量

时间:2011-08-24 20:30:07

标签: php json

我现在觉得很蠢。以下代码应该输出'如果你可以打印这个文本,那你很整洁!',但事实并非如此。有什么想法吗?

<?php
$a = (Array) json_decode("{\"406\":\"If you can get this text to print, you're neat!\"}");
// dump($a);
echo $a[406]."\n";
echo $a["406"]."\n";
echo $a['"406"']."\n";
echo $a["'406'"]."\n";


$a = Array(406=>'Sanity check: this works, why don\'t any of the previous accessors work?');
// dump($a);
echo $a[406]."\n";


function dump($a) {
    foreach ($a as $k => $v) {
        echo "$k=>$v\n";
    }
}

?>

3 个答案:

答案 0 :(得分:2)

您的原始示例返回了一个对象,因为返回类型的第二个可选参数具有默认值FALSE,或者返回一个对象。这就是你对待它的方式......

$a = json_decode("{\"406\":\"If you can get this text to print, you're neat!\"}", FALSE);
echo $a->{"406"}; // If you can get this text to print, you're neat!

稍微调整一下,你可以创建一个数组......

$a = json_decode("{\"406\":\"If you can get this text to print, you're neat!\"}", TRUE);
echo $a["406"]; // If you can get this text to print, you're neat!

...您可以将$a引用为您最初尝试的数组。注意当您尝试键入强制转换原始对象时发生的情况。这是您创建的原始数组的var_dump,后面是使用可选TRUE参数生成的数组。

array(1) { ["406"]=>  string(47) "If you can get this text to print, you're neat!" }
array(1) { [406]=>  string(47) "If you can get this text to print, you're neat!" }

当您从对象中键入数组键时,您是否看到它是如何向数组键添加引号的?这就是为什么你无法返回正确的值;因为数组键已经改变了。

答案 1 :(得分:1)

这对我有用:

$a = json_decode("{\"406\":\"If you can get this text to print, you're neat!\"}", true);

我在json_decode中添加了另一个参数。

答案 2 :(得分:0)

您使用的是json对象,而不是数组。

json对象:

{"keyname":"keyvalue"}

Json数组:

["value1","value2"]

由于它是一个对象,您可以这样访问它。

$json=json_decode("{'keyname':'keyvalue'}";
$keyname=$json->keyname;