使用PHP将列标题添加到CSV文件

Bad*_*mer 4 php csv

我试图将php/mysql生成的表转换为可下载的csv文件.当用户输入搜索参数时,将调用mysql表并将结果作为表返回.

我使用了这个线程中提供的解决方案并且工作得非常好: 在PHP中为用户创建一个CSV文件

我能够允许用户将结果保存或查看为csv文件.我遇到的问题是我不确定如何将列标题添加到文件中.例如,返回的结果采用以下格式:$ result [x] ['office'],$ result [x] ['user']等等,但我还想添加列标题"Office"和"User"使得任何查看csv文件的人都能立即知道数据的含义.

这是生成csv文件的函数:

    header("Content-type: text/csv");
    header("Content-Disposition: attachment; filename=$file.csv");
    header("Pragma: no-cache");
    header("Expires: 0");
    outputCSV($data);

function outputCSV($data) {
        $outstream = fopen("php://output", "a");
        function __outputCSV(&$vals, $key, $filehandler) {
            fputcsv($filehandler, $vals); // add parameters if you want
        }
        array_walk($data, "__outputCSV", $outstream);
        fclose($outstream);
    }
Run Code Online (Sandbox Code Playgroud)

我尝试创建以下函数,然后在调用outputCSV之前调用它,但它不成功:

function create_file_header()
{       
    $headers = 'Office, User, Tag, Value';
    $fp = fopen("php://output", "w");
    file_put_contents("$file.csv", $headers);
    fclose($fp);
}
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

Fra*_*ila 10

要创建标题,您应该只添加标题行数组并fputcsv正常使用.

您没有谈论格式$data,但如果它是关联数组,您可以为通用解决方案执行此操作:

function toCSV($data, $outstream) {
    if (count($data)) {
        // get header from keys
        fputcsv($outstream, array_keys($data[0]));
        // 
        foreach ($data as $row) {
            fputcsv($outstream, $row);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有看到array_walk()foreach循环的好处.