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

如何在CodeIgniter3中按air_id分组MySQL航班数据并遍历展示

问题描述

我有一个存储航班数据的MySQL表,使用CodeIgniter 3编写PHP代码来分组展示数据。表结构及数据如下:

journey_idair_idFlightDurationout_or_inflightduration2
1120hr 5minoutbound1205
2120hr 5minoutbound1300
3117hr 55mininbound2258
4117hr 55mininbound1075
5231hr 40minoutbound1970
6231hr 40minoutbound1900
7217hr 55mininbound2223
8217hr 55mininbound1987
9310hr 45minoutbound645
10311hr 25mininbound685

我用$this->db->get()获取数据后可以遍历,但每行都是单独数组,难以按air_id分组。因为需要保留每一行数据,不能用MySQL的GROUP BY。希望最终展示格式如下:

air_id - 1
20hr 5min   outbound    1205
20hr 5min   outbound    1300
17hr 55min  inbound     2258
17hr 55min  inbound     1075

air_id - 2
31hr 40min  outbound    1970
31hr 40min  outbound    1900
17hr 55min  inbound     2223
17hr 55min  inbound     1987

air_id - 3
10hr 45min  outbound    645
11hr 25min  inbound     685

请问按air_id分组数据以便遍历的最佳方式是什么?

解决方案

你可以在获取数据后,通过PHP将数组按air_id重组,之后再遍历重组后的数组来实现分组展示,步骤如下:

1. 获取原始数据

首先从数据库中获取所有航班数据,建议先按air_id排序,这样重组时更高效:

// 在控制器或模型中执行
$this->db->order_by('air_id', 'ASC');
$query = $this->db->get('your_flight_table');
$flights = $query->result_array(); // 获取关联数组格式的结果集

2. 按air_id重组数组

遍历原始数据,将同一air_id的行归类到同一个子数组中:

$grouped_flights = [];
foreach ($flights as $flight) {
    $air_id = $flight['air_id'];
    // 初始化当前air_id对应的数组(如果未存在)
    if (!isset($grouped_flights[$air_id])) {
        $grouped_flights[$air_id] = [];
    }
    // 将当前航班数据加入对应分组
    $grouped_flights[$air_id][] = $flight;
}

3. 遍历分组后的数据并输出

现在可以遍历重组后的数组,按需求格式输出:

foreach ($grouped_flights as $air_id => $flight_list) {
    // 输出air_id分组标题
    echo "air_id - {$air_id}\n";
    // 遍历当前分组下的所有航班
    foreach ($flight_list as $flight) {
        echo "{$flight['FlightDuration']}\t{$flight['out_or_in']}\t{$flight['flightduration2']}\n";
    }
    // 分组间添加换行分隔
    echo "\n";
}

如果是在视图文件中输出,建议用<pre>标签保留格式:

<pre>
<?php foreach ($grouped_flights as $air_id => $flight_list): ?>
air_id - <?php echo $air_id; ?>
<?php foreach ($flight_list as $flight): ?>
<?php echo $flight['FlightDuration'] . "\t" . $flight['out_or_in'] . "\t" . $flight['flightduration2']; ?>
<?php endforeach; ?>

<?php endforeach; ?>
</pre>

补充说明

  • 提前用order_by('air_id', 'ASC')排序,能让原始数据按air_id顺序排列,重组后的数组自然有序,无需额外排序。
  • 这种方式完整保留了所有原始行数据,完美避开MySQL GROUP BY丢失数据的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:25:02