如何使用PHP获取CSV文件中的总行数?我正在使用这种方法,但可以让它正常工作。
if (($fp = fopen("test.csv", "r")) !== FALSE) {
while (($record = fgetcsv($fp)) !== FALSE) {
$row++;
}
echo $row;
}
答案 0 :(得分:52)
这是使用file()
将整个文件读入数组,自动解析新行等的另一个选项:
$fp = file('test.csv');
echo count($fp);
此外,自PHP5起,您可以传递FILE_SKIP_EMPTY_LINES
...以跳过空行,如果您想:
$fp = file('test.csv', FILE_SKIP_EMPTY_LINES);
答案 1 :(得分:41)
使用SplFileObject
创建新的文件引用:
$file = new SplFileObject('test.csv', 'r');
尝试seek
到最高的PHP,PHP可以处理:
$file->seek(PHP_INT_MAX);
然后实际上它将寻找文件中可能的最高行,有最后一行,最后一行+ 1等于你的总行数:
echo $file->key() + 1;
Tricky,但这样可以避免将文件内容加载到内存中,这在处理非常大的文件时非常酷。
答案 2 :(得分:13)
尝试
$c =0;
$fp = fopen("test.csv","r");
if($fp){
while(!feof($fp)){
$content = fgets($fp);
if($content) $c++;
}
}
fclose($fp);
echo $c;
答案 3 :(得分:5)
我知道这已经很老了,但实际上我遇到了同样的问题。 作为一种解决方案,我假设使用linux特定的逻辑:
$rows = shell_exec('$(/bin/which cat) file.csv | $(/bin/which tr) "\r" "\n" | $(which wc) -l');
注意:这仅适用于Linux,如果您100%确定您的文件没有多行单元格,则应该使用此选项
答案 4 :(得分:4)
CSV行由换行符分隔。因此,按换行符拆分行,您将得到一个可以计数的行数组。
if (($fp = fopen("test.csv", "r")) !== FALSE) {
$rows = explode("\n", $fp);
$length = count($rows);
echo $length;
}
答案 5 :(得分:0)
我知道这是一篇旧帖子,但我一直在搜索这个问题,并发现原始代码的唯一问题是你需要在while循环之外定义$row
,像这样:
if (($fp = fopen("test.csv", "r")) !== FALSE) {
$row = 1;
while (($record = fgetcsv($fp)) !== FALSE) {
$row++;
}
以防它有助于某人:) echo $ row; }
答案 6 :(得分:0)
注意;没有更高的评价方法可以对文件中的行进行计数,因为它们仅对行进行计数,而不对csv条目(可以包含换行符)进行计数,因此这些解决方案都不可靠
我在op上使用了类似的解决方案,并且效果很好,但是使用op的代码,while部分可能会空行中断,这可能是他的问题。
所以看起来像这样(编辑后的操作码)
$rowCount=0;
if (($fp = fopen("test.csv", "r")) !== FALSE) {
while(!feof($fp)) {
$data = fgetcsv($fp , 0 , ',' , '"', '"' );
if(empty($data)) continue; //empty row
$rowCount++;
}
fclose($fp);
}
echo $rowCount;
答案 7 :(得分:0)
我觉得这是最可靠的:
$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;
答案 8 :(得分:-1)
如果您从表单
获取文件$file = $_FILES['csv']['tmp_name'];
$fp = new SplFileObject($file, 'r');
$fp->seek(PHP_INT_MAX);
echo $fp->key() + 1;
$fp->rewind();
像魅力一样!!!!!!!!!!!!!!!!!!
答案 9 :(得分:-1)
{{1}}
答案 10 :(得分:-2)
count(文件(' filename.csv',FILE_SKIP_EMPTY_LINES));