如何在CodeIgniter中向Telegram Bot发送完整格式化JSON数据?
解决CodeIgniter中Telegram Bot只发送最后一组表单数据的问题
我看了你的代码,问题出在每次循环都直接覆盖了$datamsg变量,导致最后只保留了最后一组数据的内容。咱们来一步步修正这个问题:
问题根源
原来的遍历逻辑里,你每次循环都会把新的表单数据直接赋值给$datamsg,之前的内容会被彻底覆盖:
foreach ($decoded_data as $each_array) { foreach ($each_array as $val){ $datamsg = $val['group'].'|'.$val['total']; }; }
这样循环结束后,$datamsg自然只剩最后一组数据的内容。
修正后的完整代码
我们需要把每一组数据的内容追加到消息字符串里,而不是覆盖。同时还可以去掉多余的嵌套循环,让代码更简洁:
public function telegram($result) { // 注意:如果$result有多条数据库记录,当前逻辑只会保留最后一条的status和dataall // 若要处理多条记录,需要把消息发送逻辑放到外层循环内 foreach ($result as $data) { $status = $data->status; $dataall = $data->dataall; } $json = $dataall; $decoded_data = json_decode($json, true); // 初始化空字符串,用来存储所有数据行 $datamsg = ''; foreach ($decoded_data as $form_data) { // 直接访问数组键名即可,无需嵌套循环 $datamsg .= $form_data['group'].'|'.$form_data['total']."\n"; } $header = "|Group | Total |"; // 用rtrim去掉最后一行多余的换行,让格式更整洁 $msg = $status."\n\n".$header."\n".rtrim($datamsg)."\n\n"; $this->load->model('telegram_m'); $this->telegram_m->sendmsg($msg); }
额外说明
- 去掉了多余的嵌套循环:
$each_array本身就是包含group和total的数组,直接访问键名就能拿到数据,不需要再遍历一次。 - 用
rtrim($datamsg)清理最后一行的多余换行,避免消息末尾出现空行。 - 如果你的
$result包含多条数据库记录,当前逻辑只会处理最后一条。如果需要批量发送多条记录的消息,要把消息拼接和发送的逻辑放到外层循环里。
这样修改后,Telegram就能收到完整的表单数据列表,和你预期的效果一致了。
内容的提问来源于stack exchange,提问作者Arila
相关产品推荐
相关产品推荐

