如何将PHP二维数组按列写入CSV文件?
PHP 将按列组织的二维数组写入 CSV 的简便方法
你有一个约12k大小的二维数组,数组的键(如'a'、'b'、'c')要作为CSV的表头,每个键对应的子数组是一列的数据,需要写入CSV文件。但fputcsv是按行写入的,这里给你一个直接简便的实现思路:
先看你的数组结构:
$data = array ( 'a' => array ( 0 => 111, 1 => 222, 2 => 333, 3 => 444, ), 'b' => array ( 0 => 555, 1 => 666, 2 => 777, 3 => 888, ), 'c' => array ( 0 => 999, 1 => 000, 2 => 111, 3 => 222, ), );
实现步骤
- 获取表头:直接提取数组的键作为CSV第一行的表头
- 按行重组数据:循环每一行的索引,将各列对应位置的值拼接成一行数据,再用
fputcsv写入 - 处理文件写入:打开目标CSV文件,依次写入表头和重组后的行数据
完整代码示例
// 打开CSV文件,准备写入 $file = fopen('output.csv', 'w'); if (!$file) { die('无法打开文件'); } // 写入表头 $headers = array_keys($data); fputcsv($file, $headers); // 获取数据行数(假设所有子数组长度一致) $rowCount = count(reset($data)); // 循环生成每一行数据并写入 for ($i = 0; $i < $rowCount; $i++) { $row = []; foreach ($data as $column) { // 若存在子数组长度不一致的情况,可添加isset判断避免报错 $row[] = isset($column[$i]) ? $column[$i] : ''; } fputcsv($file, $row); } // 关闭文件 fclose($file);
说明
- 这个方法不需要依赖额外扩展,只用PHP原生函数就能实现,逻辑直观,对于12k的数据量来说效率完全够用
- 如果你的子数组长度可能不一致,代码里的
isset判断可以保证程序不会报错,缺失的位置会用空值填充
内容的提问来源于stack exchange,提问作者Arpit Jain
相关产品推荐
相关产品推荐

