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

如何在PHP CodeIgniter中为CSV的逗号分隔值新增列

解决CodeIgniter中CSV导出时拆分活动列为多列的问题

你的问题核心是:虽然用explode拆分了活动字符串,但未将拆分后的活动数组合并到原学生信息数组中,直接输出了原$line数组,导致拆分效果没体现在CSV里。以下是修改后的完整代码及关键说明:

修改后的代码

public function export_stdinfo() {
    $filename = 'std_info.csv';
    $path = 'folder_path';
    
    if (!file_exists($path)){
        mkdir($path, 0777, true);
    }
    
    $stdinfo = $this->Std_Model->get_stdinfo();
    $output = fopen($path.$filename, 'w');

    // 统计所有学生中活动的最大数量,用于生成动态表头
    $maxActivities = 0;
    foreach ($stdinfo as $line) {
        $activityCount = count(explode(",", $line['Activities']));
        $maxActivities = $activityCount > $maxActivities ? $activityCount : $maxActivities;
    }

    // 构造表头:基础字段 + 对应数量的活动列
    $header = ['Std.rollno','Std.class','Std_name'];
    for ($i=1; $i<=$maxActivities; $i++) {
        $header[] = "Activity {$i}";
    }
    fputcsv($output, $header);
    
    // 遍历处理每条学生数据
    foreach ($stdinfo as $line) {
        // 拆分活动字符串为数组
        $activities = explode(",", $line['Activities']);
        // 移除原数组中冗余的Activities字段
        unset($line['Activities']);
        // 合并学生基础信息与拆分后的活动数组
        $exportLine = array_merge($line, $activities);
        // 写入CSV行
        fputcsv($output, $exportLine);
    }
    
    fclose($output);
    $file_url = $path.$filename;
    
    header('Content-Type: application/octet-stream');
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename=\"".$filename."\""); 
    readfile($file_url);
    exit;
}

关键修改说明

  • 动态表头适配:先遍历所有学生数据统计最大活动数,生成对应数量的Activity 1、Activity 2...表头,避免列数不匹配问题。
  • 数组合并逻辑:用unset移除原数组中的Activities字段,再通过array_merge将拆分后的活动数组合并到学生信息数组末尾,实现活动列拆分。
  • 兼容活动数量差异:若不同学生活动数量不同,array_merge会自动补位,CSV对应位置留空,符合格式规范。

如果你的业务场景中活动数量是固定值(比如每个学生最多3个活动),可以直接写死表头,省略动态统计步骤,比如:

$header = ['Std.rollno','Std.class','Std_name','Activity 1','Activity 2','Activity 3'];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:13:17