PHP循环API返回数组报错:Array to string conversion,如何输出指定字段?
解决PHP中Array to string conversion错误并正确提取API返回字段
嘿,我一眼就看出问题所在啦——你代码里的echo $x;是直接输出数组,PHP没办法把数组直接转换成字符串,所以才会抛出Array to string conversion的提示!
先看你的数据结构:从var_dump和JSON响应能看到,$characters["data"]是一个包含多个工单信息的数组,每个元素都是一个关联数组,包含ticket_id、created_at等字段。要输出指定字段,你需要遍历这个数组,逐个取出每个工单里的对应值。
原代码问题点
你的原代码中,这一行是报错的根源:
echo $x; // $x是数组,echo无法直接输出
修改后的完整代码
把原来的echo $x;替换成遍历数组的代码,比如用foreach循环:
<?php $url = 'myapiurl'; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_POSTFIELDS => "", CURLOPT_HTTPHEADER => array( "accept: application/json", "cache-control: no-cache", "content-type: application/json" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { $characters = json_decode($response, true); $tickets = $characters["data"]; // 重命名变量更清晰,代表工单列表 // 遍历每个工单 foreach($tickets as $ticket) { // 输出ticket_id和created_at echo "工单ID: " . $ticket['ticket_id'] . " | 创建时间: " . $ticket['created_at'] . "<br>"; } } ?>
输出示例
运行后会得到类似这样的结果:
工单ID: 28597 | 创建时间: 2018-05-17 15:46:07
工单ID: 28598 | 创建时间: 2018-05-17 15:49:07
工单ID: 28668 | 创建时间: 2018-05-18 09:47:28
...(后续工单内容)
额外说明
如果你想更美观地展示(比如用HTML表格),可以这样修改循环部分:
// 先输出表格头部 echo "<table border='1'>"; echo "<tr><th>工单ID</th><th>创建时间</th></tr>"; foreach($tickets as $ticket) { echo "<tr>"; echo "<td>" . $ticket['ticket_id'] . "</td>"; echo "<td>" . $ticket['created_at'] . "</td>"; echo "</tr>"; } echo "</table>";
你提供的原始数据
原代码
<?php $url = 'myapiurl'; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_POSTFIELDS => "", CURLOPT_HTTPHEADER => array( "accept: application/json", "cache-control: no-cache", "content-type: application/json" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { $characters = json_decode($response, true); $x = ($characters["data"]); echo $x; // print_r($x); //var_dump($characters); } ?>
var_dump结果
array(4) { ["data"]=> array(6) { [0]=> array(5) { ["ticket_status_id"]=> string(1) "0" ["ticket_id"]=> string(5) "28597" ["priority_id"]=> string(1) "0" ["created_at"]=> string(19) "2018-05-17 15:46:07" ["status_changed_at"]=> NULL } [1]=> array(5) { ["ticket_status_id"]=> string(1) "5" ["ticket_id"]=> string(5) "28598" ["priority_id"]=> string(1) "0" ["created_at"]=> string(19) "2018-05-17 15:49:07" ["status_changed_at"]=> string(19) "2018-05-17 10:21:21" } [2]=> array(5) { ["ticket_status_id"]=> string(1) "0" ["ticket_id"]=> string(5) "28668" ["priority_id"]=> string(1) "0" ["created_at"]=> string(19) "2018-05-18 09:47:28" ["status_changed_at"]=> NULL } [3]=> array(5) { ["ticket_status_id"]=> string(1) "0" ["ticket_id"]=> string(5) "28669" ["priority_id"]=> string(1) "0" ["created_at"]=> string(19) "2018-05-18 09:47:48" ["status_changed_at"]=> NULL } [4]=> array(5) { ["ticket_status_id"]=> string(1) "5" ["ticket_id"]=> string(5) "29036" ["priority_id"]=> string(1) "3" ["created_at"]=> string(19) "2018-05-22 12:13:03" ["status_changed_at"]=> string(19) "2018-05-22 06:43:51" } [5]=> array(5) { ["ticket_status_id"]=> string(1) "5" ["ticket_id"]=> string(5) "29037" ["priority_id"]=> string(1) "3" ["created_at"]=> string(19) "2018-05-22 12:15:29" ["status_changed_at"]=> NULL } } ["code"]=> int(200) ["error"]=> string(5) "false" ["message"]=> string(7) "Success" }
JSON响应
{"data":[{"ticket_status_id":"0","ticket_id":"28597","priority_id":"0","created_at":"2018-05-17 15:46:07","status_changed_at":null},{"ticket_status_id":"5","ticket_id":"28598","priority_id":"0","created_at":"2018-05-17 15:49:07","status_changed_at":"2018-05-17 10:21:21"},{"ticket_status_id":"0","ticket_id":"28668","priority_id":"0","created_at":"2018-05-18 09:47:28","status_changed_at":null},{"ticket_status_id":"0","ticket_id":"28669","priority_id":"0","created_at":"2018-05-18 09:47:48","status_changed_at":null},{"ticket_status_id":"5","ticket_id":"29036","priority_id":"3","created_at":"2018-05-22 12:13:03","status_changed_at":"2018-05-22 06:43:51"},{"ticket_status_id":"5","ticket_id":"29037","priority_id":"3","created_at":"2018-05-22 12:15:29","status_changed_at":null}],"code":200,"error":"false","message":"Success"}
内容的提问来源于stack exchange,提问作者Azad Alam
相关产品推荐
相关产品推荐

