我有一些类似于以下内容的 JSON:
{"internalArray": {"201": "A", "202": "B", "5": "C", "46": "D"},
"data": "ABCDEFG",
"data2": "TSXPIIF"}
我使用以下 PHP 代码对其进行解码:
$jsonOutput = json_decode($output);
我想从 JSON 数据访问“internalArray”,因此我使用以下内容引用它:
$internalArray = $jsonOutput->{'internalArray'};
当我对 $internalArray 执行 var_dump 时
object(stdClass)#4 (4)
{ ["201"]=> string(1) "A"
["202"]=> string(1) "B"
["5"]=> string(1) "C"
["46"]=> string(1) "D"
}
我发现我可以将其转换为数组,因此我执行了以下操作:
$internalArray = (array) $jsonOutput->{'internalArray'};
但是,现在我有了这个数组,我似乎无法使用像这样的值来访问它
$internalArray["202"], $internalArray["201"], etc.
当我尝试通过键访问它时,它返回 NULL。但是,当我有这样的代码时:
foreach ($internalArray as $key => $value)
{
echo $key . "," . $value;
}
它按预期打印出值,如“202,A”等。
但是,在相同的代码中,如果我将其更改为
foreach ($internalArray as $key => $value)
{
echo $key . "," . $internalArray[$key];
}
它不起作用!
谁能解释为什么我不能使用键访问 $internalArray 中的值?我在这里做错了什么吗?
最佳答案
如果你想要一个关联数组,你可以向 PHP 请求一个关联数组(参见 json_decode
的文档):
$jsonOutput = json_decode($output, true);
var_dump($jsonOutput['internalArray']);
产生:
array(4) {
[201]=>
string(1) "A"
[202]=>
string(1) "B"
[5]=>
string(1) "C"
[46]=>
string(1) "D"
}
回到你的问题,如果内部数组中的键不是数字,你的代码仍然可以工作。这里发生的事情有点奇怪:PHP 不允许您使用数字字符串(例如:
'201'
、 '46'
)作为数组的键。数字字符串键将被转换为数字键。因此,当您执行
$arr['201']
时,PHP 将改为查找 $arr[201]
。但是,当您将对象转换为数组时,数组键看起来仍然是字符串(例如: $arr['201']
)。现在实际的数组有一个数字字符串键,但是每当您尝试访问它时,PHP 都会查找一个 int 键并且从未找到它,并为您提供 NULL
。事实上,the documentation 指出:
关于php - 将数组从 json 解码为 PHP 并且无法使用键访问数组元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12832642/