PHP JSON数组遍历Bug排查请求:无法循环获取商品名称与价格
问题排查与修复
你这段代码的Bug很明确——你把关联数组当成对象来访问了!
看你调用json_decode($response, true)时传了第二个参数true,这会把JSON字符串解码成PHP关联数组,而不是对象实例。所以循环里用$product->name这种对象属性访问的写法肯定会报错,得改成数组下标访问的形式才行。
修复后的完整代码
$url = "myurl"; $response = file_get_contents($url); // 增加解码失败的判断,避免接口返回异常时出错 if (!$myArray = json_decode($response, true)) { die('JSON解码失败,请检查接口返回格式'); } foreach ($myArray as $product) { // 用数组下标访问商品名称和价格 echo '商品名称:' . $product['name'] . ',价格:' . $product['price'] . '<br>'; }
补充两种可选写法
- 如果想继续用对象属性的方式访问,可以去掉
json_decode的第二个参数(或者设为false),这样解码结果会是stdClass对象:$myArray = json_decode($response); // 默认返回对象 foreach ($myArray as $product) { echo $product->name . ',价格:' . $product->price . '<br>'; } - 也可以用
foreach的键值对遍历形式,逻辑更清晰:foreach ($myArray as $key => $product) { echo "第".($key+1)."个商品:". $product['name'] . ",价格:" . $product['price'] . "<br>"; }
内容的提问来源于stack exchange,提问作者Lorenzo Varano
相关产品推荐
相关产品推荐

