CSV(Comma Separated Values)即逗号分隔值,它是一种常用于存储和传输表格数据的文件格式。在PHP中,我们可以利用一些函数来读写CSV文件。但是,这些函数比较复杂,使用也不够方便。为了更方便地操作CSV文件,我们可以编写封装好的CSV函数。
首先,我们要知道CSV文件的数据格式。CSV文件中的数据可以被看做是一张表格,每一行代表一条记录,每一行中的每个字段之间用逗号分隔。所以,我们可以将CSV文件的数据抽象成一个二维数组。
接下来我们来创造我们的CSV函数,下面是必须的函数声明顺序
#### 1、打开 CSV 文件
在 PHP 中,我们可以使用 `fopen()` 函数打开 CSV 文件,并指定读写模式。对于读取CSV文件,我们通常使用`fopen()`函数以 `"r"` 模式打开文件。
```php
$file = fopen($filename, "r");
```
#### 2、读取 CSV 文件首行作为数组的键名
CSV 文件的首行通常包含了每个字段对应的名称,我们可以利用 `fgetcsv()` 函数读取 CSV 文件的第一行,作为数组的键名。
```php
$header = fgetcsv($file);
```
在读取了数组的第一行之后,数据读取指针就指向了第二行,我们可以利用 `feof()` 函数判断文件是否读取完毕。
#### 3、读取 CSV 文件数据
如果文件没有读取完毕,我们可以继续使用 `fgetcsv()` 函数读取 CSV 数据的记录。并将单条记录插入到二维数组中。
```php
$rows = array();
while (!feof($file)) {
$line = fgetcsv($file);
if ($line != null) {
$rows[] = array_combine($header, $line);
}
}
```
在上述代码中,`array_combine()` 函数用来将字段名称和每个字段对应的值组合成一个完整的关联数组,并将其插入到 `$rows` 数组中。
#### 4、关闭 CSV 文件
最后,我们在函数中使用 `fclose()` 函数关闭文件句柄。
```php
fclose($file);
```
### 读取 CSV 文件的完整代码:
```php
function read_csv($filename) {
$file = fopen($filename, "r");
$header = fgetcsv($file);
$rows = array();
while (!feof($file)) {
$line = fgetcsv($file);
if ($line != null) {
$rows[] = array_combine($header, $line);
}
}
fclose($file);
return $rows;
}
```
以上代码实现了读取 CSV 文件的功能,并将二维数组作为返回值。如果数据量很大,则需要考虑分批次读取,每次读取一定量的数据。
接下来,我们再来看一下如何将数据写入 CSV 文件。
#### 1、打开 CSV 文件
在 PHP 中,我们同样可以使用 `fopen()` 函数打开 CSV 文件,并指定写入模式。
```php
$file = fopen($filename, "w");
```
#### 2、写入 CSV 文件顶部
写入 CSV 文件的头部通常包含每个字段对应的名称。所以,首先我们要将头部写入文件中。
```php
fputcsv($file, $header);
```
在上述代码中,我们使用 `fputcsv()` 函数将 `$header` 数组写入到文件中。这个函数会自动将数组转换成 CSV 格式并写入文件。
#### 3、写入 CSV 文件数据
最后,我们将每个记录写入到 CSV 文件中。
```php
foreach ($rows as $row) {
fputcsv($file, $row);
}
```
在上述代码中,我们遍历程序中的每个记录,使用 `fputcsv()` 函数将其写入到文件中。
#### 4、关闭 CSV 文件
最后,我们在函数中使用 `fclose()` 函数关闭文件句柄。
```php
fclose($file);
```
### 写入 CSV 文件的完整代码:
```php
function write_csv($filename, $header, $rows) {
$file = fopen($filename, "w");
fputcsv($file, $header);
foreach ($rows as $row) {
fputcsv($file, $row);
}
fclose($file);
}
```
以上代码实现了将数据写入 CSV 文件的功能,并没有返回值。如果写入数据的量很大,需要考虑分批次写入,每次写入一定量的数据。
当然,以上封装好的函数仅仅是对读取和写入CSV文件的最基本功能的封装。实际情况下,如文件路径和文件名需要进行错误处理,读取和写入的数据也可能会有特殊的格式和处理要求,这些具体情况还需要进一步的处理。
综上所述,常用于存储和传输表格数据的CSV文件使用起来还是比较方便的,封装好CSV函数在开发web应用中是可以让代码更加的规范,并且提高代码重用,减少重复代码,提高代码健壮性和可维护性。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/
发表评论 取消回复