使用PHP,是否可以从CSV文件加载一个记录/行?
换句话说,我想将文件视为一个数组,但不想将整个文件加载到内存中。
我知道这确实是数据库的用途,但我只是在寻找一个在开发过程中使用的简单易用的解决方案。
编辑:为了澄清,我确切地知道哪一行包含我正在寻找的信息。
我只想知道是否有办法在不必将整个文件读入内存的情况下获取它。
答案 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);