2010-07-05 67 views
1

我在一个CSV文件,用while循环读取:PHP回声问题,而在while循环

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

你的输出看起来很奇怪。你确定你的csv文件格式正确吗? – Ben 2010-07-05 05:34:58

+1

发布更多验证码。您的问题不在我们可以看到的部分。 – 2010-07-05 05:44:14

回答

0
if($data[0]=="title") { 
    if (!$skipped) { 
    echo "Title row..skipping<br />"; 
    $skipped = true; 
    } 
} 
else 
//do stuff 
+0

聪明;)我应该想到的 – 2010-07-05 06:34:57

1

或者调用一次fgetcsv($handle, null, ",")没有分配,由一条线向前移动处理器:

fgetcsv($handle, null, ","); 

while (($data = fgetcsv($handle, null, ",")) !== FALSE) { 
    // do stuff 
} 
0

如果知道一定是你只需要跳过第一线即可;

if(!$skipped) 
{ 
    echo "Title row..skipping<br />"; 
    $skipped = true; 
} 
else 
//do stuff 
+0

注意:从Ast的答案引发; P – Poni 2010-07-05 05:48:50

+0

Aspired!=启发。 = P – 2010-07-05 06:09:31

0

我觉得这是更优雅的使用的foreach:

foreach data as item { 
    if (item == "title") { 
    echo "Skipping title<br/>"; 
    } 
} 

你怎么会有现在,你每次检查if (data[0] == "title")你循环。 data[0]将永远等于“标题”,所以它总是会评估为真。你可以增加一个$index变量,并在循环底部附近做一些类似if (data[$index] == $title)然后$index++,但为什么当foreach基本上会为你做。