tel*_*per 27 php csv row totals
如何使用PHP获取CSV文件中的总行数?我正在使用这种方法,但可以让它正常工作.
if (($fp = fopen("test.csv", "r")) !== FALSE) {
while (($record = fgetcsv($fp)) !== FALSE) {
$row++;
}
echo $row;
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*ill 56
这是另一个file()用于将整个文件读入数组,自动解析新行等的选项:
$fp = file('test.csv');
echo count($fp);
Run Code Online (Sandbox Code Playgroud)
另外,从PHP5开始,你可以传入FILE_SKIP_EMPTY_LINES...来跳过空行,如果你想:
$fp = file('test.csv', FILE_SKIP_EMPTY_LINES);
Run Code Online (Sandbox Code Playgroud)
手册: http ://php.net/manual/en/function.file.php
Leo*_*nte 46
使用SplFileObject以下命令创建新文件引用:
$file = new SplFileObject('test.csv', 'r');
Run Code Online (Sandbox Code Playgroud)
尝试以seek最高的Int PHP可以处理:
$file->seek(PHP_INT_MAX);
Run Code Online (Sandbox Code Playgroud)
然后实际上它将寻找文件中可能的最高行,有最后一行,最后一行+ 1等于你的总行数:
echo $file->key() + 1;
Run Code Online (Sandbox Code Playgroud)
棘手,但这会避免你将文件内容加载到内存中,这在处理非常大的文件时是一件非常酷的事情.
Nou*_*l.M 13
尝试
$c =0;
$fp = fopen("test.csv","r");
if($fp){
while(!feof($fp)){
$content = fgets($fp);
if($content) $c++;
}
}
fclose($fp);
echo $c;
Run Code Online (Sandbox Code Playgroud)
我知道这已经很老了,但实际上我遇到了同样的问题.作为一种解决方案,我假设使用linux特定的逻辑:
$rows = shell_exec('$(/bin/which cat) file.csv | $(/bin/which tr) "\r" "\n" | $(which wc) -l');
Run Code Online (Sandbox Code Playgroud)
注意:这仅适用于Linux,如果您100%确定您的文件没有多行单元格,则只应使用此选项
我觉得这个最靠谱:
$file = new SplFileObject('file.csv', 'r');
$file->setFlags(
SplFileObject::READ_CSV |
SplFileObject::READ_AHEAD |
SplFileObject::SKIP_EMPTY |
SplFileObject::DROP_NEW_LINE
);
$file->seek(PHP_INT_MAX);
$lineCount = $file->key() + 1;
Run Code Online (Sandbox Code Playgroud)