是否可以从CSV文件加载单行?

时间:2015-05-30 18:25:20

标签: php arrays csv

使用PHP,是否可以从CSV文件加载一个记录/行?

换句话说,我想将文件视为一个数组,但不想将整个文件加载到内存中。

我知道这确实是数据库的用途,但我只是在寻找一个在开发过程中使用的简单易用的解决方案。

编辑:为了澄清,我确切地知道哪一行包含我正在寻找的信息。

我只想知道是否有办法在不必将整个文件读入内存的情况下获取它。

3 个答案:

答案 0 :(得分:0)

据我了解,您正在寻找包含某些数据的行。因此,您可以实现以下逻辑: (1)扫描给定数据的文件(例如,你想要找到的行中的值), (2)只加载这一行文件, (3)在那条线上执行你的操作。

答案 1 :(得分:0)

fgetcsv()在文件资源句柄上运行,因此如果您需要,您可以获取该行的位置,您可以fseek()将资源放到该位置并正常使用fgetcsv()

答案 2 :(得分:0)

如果您在阅读完行之前不知道要查找哪一行,最好的办法是读取记录,直到您通过测试返回的数组找到记录为止。

$fp = fopen('data.csv', 'r');
while(false !== ($data = fgetcsv($fp, 0, ','))) {
   if ($data['field'] === 'somevalue') {
      echo 'Hurray';
      break;
   }
}

如果您要查看特定行,请使用splfile对象并搜索记录号。这将返回一个必须转换为数组的字符串

$file = new SplFileObject('data.csv');
$file->seek(2);
$record = $file->current();
$data = explode(",", $record);