You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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);
}

额外说明

  1. 去掉了多余的嵌套循环:$each_array本身就是包含group和total的数组,直接访问键名就能拿到数据,不需要再遍历一次。
  2. 用rtrim($datamsg)清理最后一行的多余换行,避免消息末尾出现空行。
  3. 如果你的$result包含多条数据库记录,当前逻辑只会处理最后一条。如果需要批量发送多条记录的消息,要把消息拼接和发送的逻辑放到外层循环里。

这样修改后,Telegram就能收到完整的表单数据列表,和你预期的效果一致了。

内容的提问来源于stack exchange,提问作者Arila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:59:42