📜  csv 列到数组 php (1)

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

CSV列到数组 PHP

在PHP中将CSV列转换为数组是一个常见的任务。CSV(Comma Separated Values)是一种常见的数据格式,经常用于存储和交换表格数据。

1. 使用fgetcsv函数

PHP中有一个内置的函数fgetcsv()可以方便地将一行CSV数据读入数组中。以下是一个例子:

if (($handle = fopen("file.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        for ($i = 0; $i < $num; $i++) {
            echo $data[$i] . "\n";
        }
    }
    fclose($handle);
}

代码说明:

  • 打开CSV文件并绑定到$handle变量
  • 使用while循环读取CSV数据
  • 使用fgetcsv函数将CSV数据中的每一行读入到$data数组中
  • 对读入的每一行数据进行处理
  • 关闭CSV文件
2. 将CSV列转换为关联数组

上述代码将CSV列转换为数字索引数组。如果想将CSV列转换为关联数组,则可以将第一行数据作为数组的键名。

if (($handle = fopen("file.csv", "r")) !== FALSE) {
    $header = null;
    $data = array();
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if (!$header) {
            $header = $row;
        } else {
            $data[] = array_combine($header, $row);
        }
    }
    fclose($handle);
}

代码说明:

  • 打开CSV文件并绑定到$handle变量
  • 定义$header和$data变量,并初始化为null和空数组
  • 使用while循环读取CSV数据
  • 判断是否为第一行数据,如果是,则将该行数据保存到$header数组中
  • 如果不是第一行数据,则使用array_combine函数将$header和$row数组合并为关联数组,并将结果保存到$data数组中
  • 关闭CSV文件
3. 使用第三方库

除了自己编写代码实现CSV列到数组的转换外,也可以使用第三方库来简化这个任务。以下是使用第三方库league/csv的例子:

require 'vendor/autoload.php';

use League\Csv\Reader;

$csv = Reader::createFromPath('file.csv');
$csv->setHeaderOffset(0); //set the CSV header offset

$header = $csv->getHeader(); //get the CSV header
$data = $csv->getRecords(); //get all the CSV records as an Iterator object

foreach ($data as $row) {
    //do something with $row
}

代码说明:

  • 引入league/csv库并初始化PHPExcel_Worksheet类
  • 将CSV文件加载到$csv变量中
  • 设置CSV头部偏移量
  • 使用getHeader()方法获取CSV头数组
  • 使用getRecords()方法获取CSV所有数据记录并返回一个迭代器对象
  • 使用foreach遍历迭代器对象,处理每一行数据
结论

转换CSV列为数组在PHP中非常简单,通过内建的函数或第三方库都可以快速实现。选择哪种方法取决于个人喜好和具体的应用场景。