📜  在 codeigniter 4 中读取 csv 文件 (1)

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

在 CodeIgniter 4 中读取 CSV 文件

在 Web 开发中,读取 CSV 文件是一种常见的操作。本文将介绍在 CodeIgniter 4 框架中如何读取 CSV 文件。

CSV 文件简介

CSV 文件(逗号分隔值)是一种常见的电子表格文件格式,其数据是以逗号分隔的文本。CSV 文件可以轻松地与多个应用程序兼容,如 Excel、Google Sheets 等。

CSV 文件通常用于存储大量数据,如客户名单、销售数据、库存清单等。

读取 CSV 文件

在 CodeIgniter 4 中,可以使用 CSVReader 类轻松读取 CSV 文件。该类由 CodeIgniter\HTTP\Files\CSVReader 命名空间提供。以下是读取 CSV 文件的步骤:

1.将 CSV 文件上传到服务器

用户可以通过 CodeIgniter 的上传类将 CSV 文件上传到服务器。上传类提供了一个快捷方法 move(),可以将文件从临时目录移动到指定的持久性目录中。示例代码:

$uploadedFile = $this->request->getFile('csv');

if ($uploadedFile->isValid() && ! $uploadedFile->hasMoved())
{
    $uploadedFile->move(WRITEPATH . 'uploads', $uploadedFile->getName());
}

2.创建 CSVReader 实例

一旦 CSV 文件上传到服务器,可以创建 CSVReader 实例,用于读取文件内容:

$filepath = WRITEPATH . 'uploads/mycsvfile.csv';

if (! file_exists($filepath) || ! is_readable($filepath))
{
    throw new RuntimeException('Unable to read CSV file.');
}

$csvReader = new \CodeIgniter\HTTP\Files\CSVReader($filepath);

3.读取 CSV 文件内容

使用 foreach 循环读取 CSV 文件中的每一行数据:

foreach ($csvReader as $row)
{
    // 处理每一行数据
}

$row 变量包含当前行的数据。可以使用数组索引或列名访问每个字段的值,例如:$row[0]$row['name']

完整代码示例:

$uploadedFile = $this->request->getFile('csv');
$filepath = WRITEPATH . 'uploads/' . $uploadedFile->getName();

if ($uploadedFile->isValid() && ! $uploadedFile->hasMoved())
{
    $uploadedFile->move(WRITEPATH . 'uploads', $uploadedFile->getName());

    if (! file_exists($filepath) || ! is_readable($filepath))
    {
        throw new RuntimeException('Unable to read CSV file.');
    }

    $csvReader = new \CodeIgniter\HTTP\Files\CSVReader($filepath);

    foreach ($csvReader as $row)
    {
        // 处理每一行数据
    }
}
总结

在 CodeIgniter 4 中,使用 CSVReader 类可以方便地读取 CSV 文件。上传文件到服务器后,只需几行代码就可以读取文件内容。

注意,CSVReader 类将整个 CSV 文件读入内存,因此不应使用于非常大的文件。对于大文件,可以考虑使用 SPL 迭代器和逐行读取。