如何读取无表头CSV文件并生成日期为键的PHP关联数组?
解析CSV生成PHP关联数组的解决方案
直接用PHP内置的fgetcsv()函数就能完美解决这个问题——它专门用来处理带引号、包含逗号分隔符的CSV内容,不用手动写字符串分割逻辑,避免踩坑。
方法步骤:
- 先初始化需要的关联数组,比如
$array1、$array2 - 逐行读取解析CSV内容,提取日期作为键,对应字段作为值存入数组
代码示例(读取CSV文件):
// 初始化目标数组 $array1 = []; $array2 = []; $array3 = []; $array4 = []; // 打开CSV文件(替换成你的文件路径) if (($handle = fopen('data.csv', 'r')) !== FALSE) { // 逐行解析CSV while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { // 跳过空行 if (empty($data[1])) continue; // 提取日期(第2列,索引1)作为键 $date = $data[1]; // 对应字段存入数组 $array1[$date] = $data[2]; $array2[$date] = $data[3]; $array3[$date] = $data[4]; $array4[$date] = $data[5]; } fclose($handle); } // 打印结果验证 print_r($array1); print_r($array2);
如果是处理字符串形式的CSV:
如果你的CSV内容是字符串而不是文件,用str_getcsv()配合循环处理:
$csvStr = '"1","July 1999"," 2,782,546 "," $17.38 "," $338,545.98 "," 3,004 ","" "2","August 1999"," 2,739,441 "," $18.68 "," $153,343.98 "," 3,023 ","" "3","September 1999"," 2,650,431 "," $20.86 "," $308,929.17 "," 3,042 ",""'; $array1 = []; $array2 = []; // 按行分割字符串 $lines = explode("\n", $csvStr); foreach ($lines as $line) { // 跳过空行 if (trim($line) === '') continue; // 解析当前行的CSV字段 $data = str_getcsv($line); if (empty($data[1])) continue; $date = $data[1]; $array1[$date] = $data[2]; $array2[$date] = $data[3]; } // 输出结果 echo '$Array1 = ' . var_export($array1, true) . ';' . PHP_EOL; echo '$Array2 = ' . var_export($array2, true) . ';' . PHP_EOL;
关键说明:
fgetcsv()和str_getcsv()会自动处理带双引号的字段,像"2,782,546"这种包含逗号的数值会被解析成单个字符串,不会被错误分割- 索引对应关系:CSV每行的第2列(索引1)是日期,第3列(索引2)对应$array1的值,第4列(索引3)对应$array2的值,以此类推
- 代码里加了空行判断,避免处理空内容导致的错误
内容的提问来源于stack exchange,提问作者Nicole Evans
相关产品推荐
相关产品推荐

