PHP读取和写入CSV文件的示例代码

2024-03-06 0 3,192

目录

1. 什么是 CSV 文件

CSV(逗号分隔值)文件是使用逗号分隔信息的文本文件。该文件的每一行都是一条数据记录,也就意味着它可以用于以表格的形式展现信息。

2. 从 CSV 文件中读取数据

我将使用内置函数 file 从 CSV 文件中读取数据,然后使用 str_getcsv() 解析包含逗号的字符串。
在介绍如何使用str_getcsv() 函数之前,我想向你介绍如何输出 CSV 文件中的数据。
<?php
if($_FILES){
var_dump(file($_FILES[\'file\'][\'tmp_name\'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
}
?>

<html>
<body>
<form method=\"post\" enctype=\"multipart/form-data\">
<input type=\"file\" name=\"file\" />
<button>upload</button>
</form>
</body>
</html>

当我使用上面的代码上传文件时,输出以下数据:
PHP读取和写入CSV文件的示例代码
如图所示,每个字符串中都有逗号,每个逗号将一条信息与另一条信息隔开。
使用 array_map() 函数,并且 str_getcsv() 作为回调函数,该回调将解析每个具有逗号的字符串并将它们分隔在一个数组中。
if($_FILES){
//loop through the csv file into an array
$theCSV = array_map(\'str_getcsv\', file($_FILES[\'file\'][\'tmp_name\'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
//dump result
var_dump($theCSV);
}

输出如下:
PHP读取和写入CSV文件的示例代码
输出的数据看起来比之前要好得多,我们将列标题(全名、QQ、电子邮件)作为该数组的第一个元素。
我们使用 array_walk() 函数遍历此数组 ,然后提供一个回调函数,它将列标题(全名、QQ、电子邮件)和每个 CSV 数据组合为一个新数组。
if($_FILES){
//loop through the csv file into an array
$theCSV = array_map(\'str_getcsv\', file($_FILES[\'file\'][\'tmp_name\'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
/*Walk through the array and combine the headers which is the first element of our csv array with the rest of the csv data*/
array_walk($theCSV, function(&$ary) use($theCSV) {
$ary = array_combine($theCSV[0], $ary);
});
//dump result
var_dump($theCSV);
}
?>

注意,在上面的回调函数中,我使用了变量& 运算符将 $ary 通过引用传递给函数,这使的我们可以修改原始数组。当我们运行上面的代码时,这就是我们的 CSV 数组现在的样子:
PHP读取和写入CSV文件的示例代码
注意这里有个问题:这个新数组的第一个元素是表头,因为我们之前让它与 CSV 数组的其他数组组装在了一起。可以使用 array_shift() 来解决这个问题。
if($_FILES){
//loop through the csv file into an array
$theCSV = array_map(\'str_getcsv\', file($_FILES[\'file\'][\'tmp_name\'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
/*Walk through the array and combine the headers which is the first element of our csv array with the rest of the csv data*/
array_walk($theCSV, function(&$ary) use($theCSV) {
$ary = array_combine($theCSV[0], $ary);
});
//remove column headers which is the first element
array_shift($theCSV);
//dump result
var_dump($theCSV);
}

这就是我们最终的 CSV 数组的样子
PHP读取和写入CSV文件的示例代码
将上面的代码封装成一个函数,如下:
function readCSV($file){
if(empty($file) || !file_exists($file)) return;
//store the column headers
$headers = null;
$theCSV = array_map(\'str_getcsv\', file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
/*Walk through the array and combine the headers which is the first element of our csv array with the rest of the csv data*/
array_walk($theCSV, function(&$ary) use($theCSV, &$headers) {
$ary = array_combine($theCSV[0], $ary);
//store the headers
$headers = $theCSV[0];
});
//remove column headers which is the first element of our csv array
array_shift($theCSV);
//return data
return array(
\"headers\" => $headers,
\"data\" => $theCSV
);
}

3. 将数据写入 CSV 文件

将数据写入 CSV 文件,其逻辑是使用 fopen() 函数以附加模式打开 CSV 文件, 然后用 fputcsv() 解析我们要写入 CSV 文件的数据,然后此方法将这些数据写入文件流当中。
if($_SERVER[\'REQUEST_METHOD\'] == \"POST\"){
$file = \"./my_csv_file.csv\";
//loop through the csv file into an array
$csvData = readCSV($file);
//create array to store the new data
$newData = [];
//loop through headers and then add values as a new array
foreach($csvData[\'headers\'] as $index => $key){
if($key == \'Full Name\'){
$newData[$key] = $_POST[\'full_name\'];
}elseif($key == \'Email\'){
$newData[$key] = $_POST[\'email\'];
}elseif($key == \'Phone\'){
$newData[$key] = $_POST[\'phone\'];
}else{
$newData[$key] = \'\';
}
}
var_dump($newData);
}

如图所示就是我们将写入到 CSV 文件的数组的数据
PHP读取和写入CSV文件的示例代码
在我们将这些数据写入到 CSV 文件之前,我们必须去掉 key,我们可以使用 array_values() 函数
if($_SERVER[\'REQUEST_METHOD\'] == \"POST\"){
$file = \"./my_csv_file.csv\";
//loop through the csv file into an array
$csvData = readCSV($file);
//create array to store the new data
$newData = [];
//loop through headers and then add values as a new array
foreach($csvData[\'headers\'] as $index => $key){
if($key == \'Full Name\'){
$newData[$key] = $_POST[\'full_name\'];
}elseif($key == \'Email\'){
$newData[$key] = $_POST[\'email\'];
}elseif($key == \'Phone\'){
$newData[$key] = $_POST[\'phone\'];
}else{
$newData[$key] = \'\';
}
}
//open the csv file as in append mode
$fp = fopen($file, \'a+\');
//remove keys from new data
$newData = array_values($newData);
//append data to csv file
fputcsv($f, $newData);
//close the resource
fclose($fp);
}

不出意外的话,数据就会成功写入到 CSV 文件当中去了。
PHP读取和写入CSV文件的示例代码
以上就是PHP读取和写入CSV文件的示例代码的详细内容,更多关于PHP CSV文件的资料请关注其它相关文章!

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 PHP教程 PHP读取和写入CSV文件的示例代码 http://www.20zxx.cn/813421/xuexijiaocheng/qes.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务