php中将csv转数组有五种方法:一、fgetcsv逐行读取;二、str_getcsv配合file一次性读取;三、splfileobject面向对象读取;四、处理标题行生成关联数组;五、用league/csv库高级解析。

如果您需要在PHP中将CSV文件的内容读取并转换为数组,可以使用内置函数或自定义逻辑来解析CSV格式。以下是几种可行的操作方法:
一、使用fgetcsv函数逐行读取
该方法通过文件指针逐行读取CSV内容,并将每行解析为索引数组,适合处理大文件且内存占用较低。
1、使用fopen打开CSV文件,指定只读模式。
2、调用fgetcsv函数读取第一行,返回一个包含字段值的索引数组。
立即学习“PHP免费学习笔记(深入)”;
3、在while循环中持续调用fgetcsv,直到返回false为止。
4、将每次返回的数组追加到主结果数组中。
5、使用fclose关闭文件指针。
二、使用str_getcsv配合file函数一次性读取
该方法先将整个CSV文件读入内存为字符串数组(每行为一项),再对每一行调用str_getcsv解析,适合小文件且代码简洁。
1、调用file函数读取CSV文件,返回每行作为元素的数组。
2、初始化一个空数组用于存储最终结果。
3、遍历file返回的数组,对每一行调用str_getcsv进行字段分割。
4、将str_getcsv返回的数组追加到主结果数组中。
5、确保CSV内容不含BOM头,否则需用trim或mb_substr清除前导不可见字符。
三、使用SplFileObject类面向对象方式读取
SplFileObject提供了更现代的文件操作接口,支持seek、key、current等方法,可直接迭代CSV行并自动解析。
1、实例化SplFileObject对象,传入CSV文件路径。
2、设置SplFileObject的setFlags为SplFileObject::READ_CSV标志。
3、使用foreach遍历SplFileObject对象,每次迭代返回一行解析后的数组。
4、在循环体内将当前行数组推入结果数组。
5、无需手动调用fclose,对象销毁时自动释放资源。
四、处理带标题行的CSV并生成关联数组
当CSV首行为字段名时,可将其作为键名,后续每行作为对应值生成关联数组,提升数据可读性。
1、使用fgetcsv读取第一行,保存为$keyArray。
2、初始化$resultArray为空数组。
3、在后续循环中,对每一行调用array_combine($keyArray, $rowData)生成关联数组。
4、将生成的关联数组追加至$resultArray。
5、若某行字段数与标题行不一致,需检查该行是否含未转义的逗号或换行符。
五、使用第三方库如league/csv进行高级解析
该库支持编码检测、分隔符自动识别、流式读取及错误行捕获,适用于复杂CSV场景。
1、通过Composer安装league/csv包。
2、使用Reader::createFromPath创建读取器实例。
3、调用fetchOne或fetchAll获取单行或全部数据。
4、设置setDelimiter和setEnclosure以适配非标准CSV格式。
5、若CSV含中文且出现乱码,请确认文件编码为UTF-8且无BOM。











