📜  php csv 到多行数组 $_FILES - PHP (1)

📅  最后修改于: 2023-12-03 15:03:34.703000             🧑  作者: Mango

将CSV导入为多行数组: $_FILES - PHP

在处理上传的CSV文件时,通常我们需要将其转换为可处理的数据结构,例如多行数组。这个过程并不难,只需要借助PHP自带的函数即可完成。

以下是一个基本的步骤列表:

  1. 上传CSV文件并保存在服务器上
  2. 打开CSV文件并读取其内容
  3. 将CSV内容转换为数组
  4. 将数组保存在 $_FILES 变量中
上传CSV文件并保存在服务器上

“文件上传” 是一个常用的PHP方法。在HTML表单中,可以使用 enctype="multipart/form-data" 表示表单中包含上传文件。在PHP中,需要使用超全局变量 $_FILES接收表单上传的文件。

以下是HTML表单的示例代码:

<form action="upload.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="csv_file">
  <input type="submit" value="上传">
</form>

在上面的代码中,<input type="file"> 表示为文件上传类型,我们可以在$_FILES中访问文件及其信息。

在PHP中,可以通过以下代码来保存上传的文件:

$tmp_file_name = $_FILES['csv_file']['tmp_name'];
$upload_file_name = 'uploads/' . $_FILES['csv_file']['name'];
move_uploaded_file($tmp_file_name, $upload_file_name);

注意,上述代码中的 uploads/ 是一个目标文件夹,用来存放上传文件。如果该目录不存在,需要在代码中先创建该目录。

打开CSV文件并读取其内容

PHP自带的函数 fopen() 用于打开文件,可以使用网站根目录中的相对路径或绝对路径来打开文件。

$csv_file = fopen($upload_file_name, 'r');

在上面的代码中,$upload_file_name 是上传后保存的CSV文件的完整路径。

函数 fopen() 具有多种操作模式,"r" 模式表示为只读模式。在此模式下,我们可以使用 fgets()函数读取文件的一行内容。

$csv_lines = [];
while (!feof($csv_file)) {
    $csv_lines[] = fgets($csv_file);
}

在上面的代码中,$csv_lines 是一个数组,用于存储CSV文件的每一行数据。

将CSV内容转换为数组

在PHP中,有一个内置函数 str_getcsv() 用于将CSV格式数据转换为数组。一般情况下,该函数的参数为每行的CSV字符串。

例如,我们假设每行数据都是由逗号分隔的,那么可以使用如下代码将CSV内容转换为数组。

$csv_data = [];
foreach ($csv_lines as $csv_line) {
    $csv_data[] = str_getcsv($csv_line);
}

在上面的代码中,$csv_data 是一个二维数组。每个小数组代表CSV中的一行数据。

将数组保存在 $_FILES 变量中

最后一步是将转换后的数组保存在 $_FILES 变量中。

$_FILES['csv_data'] = $csv_data;

现在,上传的CSV文件已转换为一个多行数组,可以在后续程序中直接使用。

以上就是将CSV文件导入为多行数组的基本步骤,此方法适用于处理大多数基本CSV文件。

结论

本文介绍了如何将CSV文件转换为多行数组,并在 PHP 中将其作为 $_FILES 变量保存。我们使用PHP自带的函数来完成任务,包括 move_uploaded_file()fopen()fgets()str_getcsv() 等函数。

希望这个简单的示例能够帮助您更好地处理和理解csv文件上传和处理。