PHP如何访问JSON解码后的多维数组/数组的数组指定元素
问题原因
你拿不到目标值的核心问题是没有理清JSON解码后的数组层级,同时存在索引位置写错、漏写层级、可能的变量大小写不匹配的问题。
先把你给出的JSON转成PHP关联数组(也就是json_decode($json, true)执行后的结果)的层级理清楚:
- 最外层是数字索引数组,下标从0开始计数
- 下标
0:是第一个对象,仅包含food1/food2/food3三个键,不存在data字段 - 下标
1:是第二个对象,包含food1和data两个键
- 下标
- 第二个对象下的
data字段,本身又是一个数字索引数组,它的下标0对应的元素,才是存储name、name2字段的关联数组
另外注意PHP变量名大小写敏感,$Result和$result是两个完全独立的变量,混用也会导致取值失败。
正确写法
首先确保你解码JSON时传入了第二个参数true,这样才能得到方便访问的关联数组格式:
// $rawJson 是你通过CURL获取到的原始JSON字符串 $result = json_decode($rawJson, true); // 取值时顺着层级一层一层写索引即可 $targetValue = $result[1]['data'][0]['name']; echo $targetValue; // 输出:I need to access this
之前写法的错误点梳理
$Result[0]["data"]["name"]:三处错误,一是外层索引用了0,对应元素根本没有data字段;二是漏了data数组下的[0]层级;三是变量名大写如果和实际存储的小写$result不一致,会直接找不到变量。$result[0][1]["data"]["name"]:外层起始索引就写错了,下标0对应的元素下不存在下标为1的内容,完全找错了层级位置。
排查小技巧
后续遇到多层数组取值报错的情况,可以先用print_r($result)或者var_dump($result)打印完整的数组结构,对着打印出来的层级一层层对应索引写,就不会出现层级错漏的问题。
内容的提问来源于stack exchange,提问作者AnotherUser
相关产品推荐
相关产品推荐

