我使用while循环读取csv文件:
while (($data = fgetcsv($handle, null, ",")) !== FALSE)
我想跳过第一行,因为这是标题行,我想在屏幕上显示“跳过第一行”。
if($data[0]=="title")
echo "Title row..skipping<br />";
else
//do stuff
问题是因为它在一个while循环中打印出“标题行...跳过”这里显示的一堆次数:
Checking row 0...
Title row..skipping
Title row..skipping
Title row..skipping
Title row..skipping
Title row..skipping
Title row..skipping
Title row..skipping
Checking row 1...
我应该怎么做才能只打印一次?它与php的输出缓冲有关吗?
答案 0 :(得分:1)
或者在没有分配的情况下调用fgetcsv($handle, null, ",")
一次,将处理程序向前移动一行:
fgetcsv($handle, null, ",");
while (($data = fgetcsv($handle, null, ",")) !== FALSE) {
// do stuff
}
答案 1 :(得分:0)
if($data[0]=="title") {
if (!$skipped) {
echo "Title row..skipping<br />";
$skipped = true;
}
}
else
//do stuff
答案 2 :(得分:0)
如果你确定你只需要跳过第一行,那么
if(!$skipped)
{
echo "Title row..skipping<br />";
$skipped = true;
}
else
//do stuff
答案 3 :(得分:0)
我认为使用foreach会更优雅:
foreach data as item {
if (item == "title") {
echo "Skipping title<br/>";
}
}
你现在如何拥有它,每次循环时你都在检查if (data[0] == "title")
。 data[0]
将始终等于“title”,因此它将始终评估为true。您可以增加$index
变量并在循环底部附近执行if (data[$index] == $title)
然后$index++
之类的操作,但为什么foreach
基本上会为您执行此操作。