PHP如何只增加4行CSV文件

时间:2014-11-16 14:41:03

标签: php for-loop while-loop increment fgetcsv

我正在尝试,从CSV文件中显示一些数据,并且只需要显示4个第一行。每行都在'ul'列表中。现在一切都显示出来了,所以显示了所有的ul。我试着添加另一个' while'循环,但一切都破了。

我确信这对于习惯在php中编码的人来说很容易。我正在学习PHP,所以我会仔细研究好的答案,以了解我需要做些什么改变。这是代码:

<?php

        $row = 1;
        if (($handle = fopen($this->getBaseUrl()."csvfile/csv_test.csv", "r")) !== FALSE) {

            echo '<ul>';

            $count = 0;
            while (($data = fgetcsv($handle, 1000, ",",'"')) !== FALSE) {

            $name=$data[0];
            $bonus=$data[1];
            $start=$data[2];
            $end=$data[3];
            $brand=strtok($name, " - ");

                $count++;
                echo
                '<li><ul><li><img width="90" height="40" src="'
                .$this->getSkinUrl('images/logos/').strtolower($brand).'.jpg" /></li>';
                echo '<li>'.$name.'</li>';
                echo '<li class="bonus"><strong>'.$bonus.'</strong></li>';
                echo '<li><span class="green">Start: '.$start.'</span></li>';
                echo '<li><span class="red"><strong>end: '.$end.'</strong></span></li>';
                echo '<li class="pdf"><a target="_blank" href="'
                .$pdf.'" title=""><img src="'.$this->getSkinUrl('images/icon-pdf.png')
                .'"/><br/>PDF</a></li></ul></li>';
                ?>

            <?php
            }   
            echo '</ul>';
            fclose($handle);
        }

        else {
                echo "NOPE.";
            }

        ?>

1 个答案:

答案 0 :(得分:0)

while (($data = fgetcsv($handle, 1000, ",",'"')) !== FALSE) 

相当于

while(true)

如果您为要检查的条件添加更多元素

while(true && true) // so loop carries on

所以如果找到

while(true && false) // equates to false, so loop will stop

它停止了。

所以如果你有正确的括号:

while (
      ($data = fgetcsv($handle, 1000, ",",'"')) !== false // true
      &&
      $count < 5 // true
      ){}

我很抱歉,但我不能测试我刚写的内容,但原则上这是在4次迭代中停止的一种方式。

还有很多其他的,其中许多比这更具可读性。

但我只是想回答你当前的问题。

我发现foreach()更易于阅读,例如,使用转储,所以你知道发生了什么,而不是猜测应该发生什么:

$data = fgetcsv($handle, 1000, ",",'"');
// var_dump($data) // uncomment this to see what is happening
$count = 1;
foreach($data as $row){
if($count === 5) break;
// var_dump($row); // uncomment this to see what is happening

echo $row[0];
$count++;
// var_dump($count); // uncomment this to see what is happening
}

同样,未经测试,但只说明了实现相同目标的另一种方法。

做一步,证明,转到下一步。

如果它不起作用,取消注释并追回问题 - 这就是你必须思考和行动的方式。

HTH