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

函数数组丢失问题:为何仅返回1条data数组而非预期11条?

问题分析:Chart数据仅返回单条的原因与修复方案

你遇到的问题核心是循环中错误地覆盖了series里的data数组,而不是逐步追加数据,导致最终只保留了最后一条记录的数值。

问题根源拆解

看你这段代码的while循环部分:

while ($row = $penjualan->FetchNextObject(false)) {
    $result["categories"][]=$row->id_tenant;
    $result["nama_kantin"][]=$row->nama_kantin;
    $result["series"][0]= array(
        'name' => 'Total Penjualan',
        'data' => array((float)$row->total)
    );
}

每次循环时,你都直接重新赋值$result["series"][0],相当于把整个series的第一个元素完全替换掉——其中的data数组每次都只包含当前行的total。循环执行11次后,最后一次赋值会覆盖之前所有的结果,所以最终data里只剩最后一条数据的数值。

修复后的代码

我们需要先在循环外初始化好series的结构,然后在循环里只往data数组中追加元素:

public function chartService(){ 
    $result["categories"] = array(); 
    $result["nama_kantin"] = array(); // 提前初始化数组,避免未定义警告
    // 先初始化series的基础结构,设置名称并预留空的data数组
    $result["series"] = array(
        array(
            'name' => 'Total Penjualan',
            'data' => array()
        )
    );

    $penjualan = $this->db->Execute("select id_tenant, nama_kantin, count(id_penjualan) as jumlah_penjualan, sum(total) as total from kantin_penjualanTenant a join kantin_lokasiKantin b on a.id_kantin=b.id_kantin group by a.id_tenant,b.nama_kantin"); 
    
    while ($row = $penjualan->FetchNextObject(false)) { 
        $result["categories"][] = $row->id_tenant; 
        $result["nama_kantin"][] = $row->nama_kantin; 
        // 将当前行的total追加到data数组末尾
        $result["series"][0]['data'][] = (float)$row->total; 
    } 

    echo json_encode($result); 
}

额外说明

  • 提前初始化了$result["nama_kantin"]数组,避免PHP开启严格错误提示时出现未定义数组的警告。
  • 现在series[0]['data']会逐步收集每一行的total值,最终得到包含11个元素的数组,和你的查询结果数量完全匹配。

内容的提问来源于stack exchange,提问作者Muhammad Alief Agusta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:02:12