PHP将数组转为CSV:如何让Timestamp与问答同行?
PHP数组转CSV格式问题分析与解决
代码错误点
你的代码核心问题是把表头和数据拆成了独立的行,没有将Timestamp与问答内容合并到同一行,同时时间戳格式不符合需求:
- 你将
Timestamp单独存入$keyarray,问题列表存入$questionarray,然后分别作为两行写入CSV,导致首行只有Timestamp,问题单独占一行 - 时间戳值单独存入
$valuearray,答案列表存入$answerarray,同样分两行写入,导致时间戳和答案分开 - 使用
time()输出的是Unix时间戳(如1676484864),但你需要的是格式化后的可读日期时间(如12/3/21 14:05)
修正后的代码
<?php $qna = [ [ "questionNo"=> 1, "question"=> "I am the life of the party.", "answer"=> 2 ], [ "questionNo"=> 2, "question"=> "I feel little concern for others.", "answer"=> 4 ], [ "questionNo"=> 3, "question"=> "I am always prepared.", "answer"=> 2 ], [ "questionNo"=> 4, "question"=> "I get stressed out easily.", "answer"=> 4 ] ]; $csv = '/home/ankur/Desktop/iq_data.csv'; $fp = fopen($csv, 'w'); // 构建首行:Timestamp + 所有问题 $headerRow = ['Timestamp']; // 构建数据行:格式化后的时间戳 + 所有答案 $dataRow = [date('m/d/y H:i')]; // 按期望格式生成时间 foreach ($qna as $item) { $headerRow[] = $item['question']; $dataRow[] = $item['answer']; } // 写入两行内容:首行表头,第二行数据 fputcsv($fp, $headerRow); fputcsv($fp, $dataRow); fclose($fp); ?>
修正说明
- 合并表头行:将
Timestamp作为第一个元素,遍历数组把所有问题追加到同一个数组$headerRow中,确保首行是Timestamp+所有问题 - 合并数据行:用
date('m/d/y H:i')生成符合需求的格式化时间戳,作为第一个元素,再把所有答案追加到$dataRow中,保证时间和答案在同一行 - 简化写入逻辑:只需要写入两行数据,去掉多余的数组拼接和循环写入步骤
内容的提问来源于stack exchange,提问作者Ankur Guha
相关产品推荐
相关产品推荐

