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

按Vehicle_id分组拆分GPS数据表数据为多数组的实现咨询

嘿,我来帮你搞定这个需求!你需要把GPS数据按vehicle_id分组后输出JSON,这里有两种靠谱的实现方式,我给你详细拆解:

方案一:PHP遍历分组(推荐,逻辑清晰易维护)

这种方式是最通用的,不管你用什么数据库都能生效,而且后续要调整分组逻辑或者加过滤规则都很方便。

修改后的控制器代码

public function get_location_data(){
    // 从模型获取关联数组格式的数据(比对象更方便数组操作)
    $data = $this->location_modal->get_location();
    $final = [];
    
    // 遍历原始数据,按vehicle_id分组
    foreach($data as $value){
        $vehicleId = $value['vehicle_id'];
        // 如果该vehicle_id还没在分组数组里,先初始化空数组
        if(!isset($final[$vehicleId])){
            $final[$vehicleId] = [];
        }
        // 将当前GPS条目加入对应vehicle_id的数组
        $final[$vehicleId][] = [
            'lat' => $value['lat'],
            'long' => $value['long']
            // 如果你需要保留所有字段,直接写 $final[$vehicleId][] = $value; 即可
        ];
    }
    
    // 输出格式化后的JSON
    echo json_encode($final);
}

对应的模型代码(调整为返回关联数组)

function get_location() {
    $this->db->select('*');
    $this->db->from('gps_data');
    $result = $this->db->get();
    // 用result_array()返回关联数组,方便后续分组操作
    return $result->result_array();
}

方案二:数据库辅助分组(仅适合特定场景)

如果你想用数据库查询直接完成分组,需要依赖数据库的JSON函数(比如MySQL 5.7+),但这种方式有局限性(比如GROUP_CONCAT有默认长度限制,字段多的话拼接麻烦),仅适合简单场景。

修改后的模型代码

function get_location_grouped() {
    // 用GROUP_CONCAT拼接每个vehicle_id的GPS数据为JSON字符串
    $this->db->select('vehicle_id, GROUP_CONCAT(JSON_OBJECT("lat", lat, "long", `long`)) as locations');
    $this->db->from('gps_data');
    $this->db->group_by('vehicle_id');
    $result = $this->db->get();
    return $result->result_array();
}

对应的控制器代码

public function get_location_data(){
    $data = $this->location_modal->get_location_grouped();
    $final = [];
    
    foreach($data as $value){
        // 把数据库拼接的字符串转成JSON数组
        $final[$value['vehicle_id']] = json_decode('[' . $value['locations'] . ']', true);
    }
    
    echo json_encode($final);
}

总结

优先选择方案一,因为它逻辑简单、通用性强,后续扩展和维护成本低。方案二只在你有特殊需求(比如大数据量想减少PHP遍历压力)时考虑,记得要先确认你的数据库支持JSON函数,并且调整GROUP_CONCAT的长度限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:00:32