我有一些类似于以下内容的 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/

10-10 00:19
查看更多