流行的电子表格程序使用 CSV 文件格式(代表逗号分隔值)以纯文本形式导出工作表数据。文件中的每一行都表示工作表的一行,每列中的值用逗号分隔。
PHP 的文件系统函数库提供了两个函数 : fgetcsv() 和 fputcsv(),分别用于将 CSV 文件中的数据读取到数组中,并将数组元素放入 CSV 文件中。
fgetcsv() 函数
getcsv() 函数从文件指针中读取该行,并将其解析为 CSV 字段。
fgetcsv(
resource $stream,
?int $length = null,
string $separator = ",",
string $enclosure = "\"",
string $escape = "\\"
): array|false
$stream 参数是文件资源的句柄,以 读取模式 打开。用于解析字段的默认分隔符符号是逗号,如果需要,您可以指定任何其他符号。
fgetcsv() 函数返回一个包含字段的索引数组。如果该函数遇到任何错误,它将返回 false。
为了演示 fgetcsv() 函数的使用,请将以下文本作为 “hello.txt” 存储在当前工作目录中。
Name, Email, Post, Salary
Ravishankar, ravi@gmail.com, Manager, 40000
Kavita, kavita@hotmail.com, Assistant, 25000
Nandkumar, nandu@example.com, Programmer, 30000
Ravishankar, ravi@gmail.com, Manager, 40000
Kavita, kavita@hotmail.com, Assistant, 25000
Nandkumar, nandu@example.com, Programmer, 30000
示例
以下 PHP 代码从此文件中读取 CSV 数据,并返回一个数组。然后,数组中的字段将呈现在 HTML 表中 -
<?php
$filename = 'hello.csv';
$data = [];
// 打开文件
$f = fopen($filename, 'r');
if ($f === false) {
die('无法打开文件 ' . $filename);
}
// 一次读取CSV文件中的每一行
while (($row = fgetcsv($f)) !== false) {
$data[] = $row;
}
// 关闭文件
fclose($f);
echo "<table border=1>";
foreach ($data as $row) {
echo "<tr>";
foreach($row as $val) {
echo "<td>$val</td>";
}
echo "</tr>";
}
echo "</table>";
?>
它将产生以下输出 -
Name | Post | Salary | |
---|---|---|---|
Ravishankar | ravi@gmail.com | Manager | 40000 |
Kavita | kavita@hotmail.com | Assistant | 25000 |
Nandkumar | nandu@example.com | Programmer | 30000 |
fputcsv() 函数
fputcsv() 函数将一个索引数组(其元素以逗号分隔)放在 CSV 文件的当前文件指针位置。
fputcsv(
resource $stream,
array $fields,
string $separator = ",",
string $enclosure = "\"",
string $escape = "\\",
string $eol = "\n"
): int|false
目标文件必须在写入模式下打开。第二个必需参数是由逗号分隔的字段组成的数组。与 fgetcsv() 函数一样,默认分隔符为逗号。
示例
在下面的代码中,将逗号分隔值的二维数组写入 CSV 文件。
<?php
$data = [
["Name", "Email", "Post", "Salary"],
["Ravishankar", "ravi@gmail.com", "Manager", "40000"],
["Kavita", "kavita@hotmail.com", "Assistant", "25000"],
["Nandkumar", "nandu@example.com", "Programmer", "30000"],
];
$filename = 'employee.csv';
// 打开csv文件进行写入
$f = fopen($filename, 'w');
if ($f === false) {
die('打开文件时出错, ' . $filename);
}
// 一次将每一行写入文件
foreach ($data as $row) {
fputcsv($f, $row);
}
// 关闭文件
fclose($f);
?>
执行上述程序后,应在当前工作目录中创建 “employee.csv” 文件。