使用Curl获取Fake API数据后用foreach遍历报类型错误求助
问题原因及修复方案
错误根源
你的代码中curl_exec($curl)默认会直接把API响应输出到页面,而非将内容返回给$response变量。此时$response的值是布尔值true(对应int类型的1),经过json_decode后得到null,强制转数组后变成[1]。foreach循环时$value是整数1,尝试访问$value['userId']这类数组键就会触发「Trying to access array offset on value of type int」错误。
修复步骤
- 添加
CURLOPT_RETURNTRANSFER选项:让curl_exec返回响应内容,而非直接输出 - 增加错误处理:检查curl请求、JSON解码是否成功,避免后续逻辑出错
修复后的代码:
<?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://jsonplaceholder.typicode.com/albums", CURLOPT_CUSTOMREQUEST => 'GET', // 关键配置:让curl返回响应内容 CURLOPT_RETURNTRANSFER => true )); $response = curl_exec($curl); // 检查curl请求是否失败 if(curl_errno($curl)){ echo 'Curl错误:' . curl_error($curl); curl_close($curl); exit; } curl_close($curl); // 检查JSON解码是否正常 $values = json_decode($response, true); if(json_last_error() !== JSON_ERROR_NONE){ echo 'JSON解码失败:' . json_last_error_msg(); exit; } // 确认是数组后再循环遍历 if(is_array($values)){ foreach ($values as $value){ echo $value['userId']."<br>"; echo $value["id"]."<br>"; echo $value["title"]."<br><br>"; } } ?>
额外说明
CURLOPT_RETURNTRANSFER是curl获取响应内容的核心配置,必须添加- 错误处理能帮你快速定位请求或解码环节的问题,避免无意义的后续报错
- 无需对
$values强制转数组,先通过is_array()判断更安全
内容的提问来源于stack exchange,提问作者Reza Movahhedy Nasab
相关产品推荐
相关产品推荐

