函数数组丢失问题:为何仅返回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
相关产品推荐
相关产品推荐

