使用while循环列出文件

时间:2010-11-03 07:15:25

标签: php loops while-loop

我无法让这个工作正常,我需要程序列出文件中的记录,如果$ records [$ row] [2]与前一个相同,它应该用'a'重复类'field'新的$记录[$ row] [2],否则它应该开始一个新的#row。请帮忙!

if (($handle = fopen('upload/ATLANTA.csv', "r")) !== FALSE) {


    $prevRow2 = '';

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

        $records[] = $data;

        echo 'Previous'. $prevRow2;
        echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>";

        if ($records[$row][2] == $prevRow2) {

            for ($c=0; $c < $num; $c++) {
            if ($c != 1) {  
                echo "<div class=\"field\">" . $data[$c] . "</div>";
                }   
            }
            $prevRow2 = $records[$row][2];
            $row++;
        }
        else {
            echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>";
            for ($c=0; $c < $num; $c++) {
            if ($c != 1) {  
                echo "<div class=\"field\">" . $data[$c] . "</div>";
                }   
            }
            $prevRow2 = $records[$row][2];
            $row++;
            echo "</div>";
        }




    echo "</div>";
}
fclose($handle);

}

1 个答案:

答案 0 :(得分:0)

首先,您似乎假设您的CSV文件按要分组的列排序。如果不是这种情况,那么您应首先读取文件,对其进行排序,然后进行打印。如果您的CSV文件对于服务器的内存来说不是太大,那么这应该可行。

此外,您的代码有重复并将整个文件存储到一个数组中(实际上,就像我上面建议的那样,但我不知道它是否是故意的)。尝试这样的事情:

这是我的demo.csv:

"Banana", "yellow"
"Lemon", "yellow"
"Orange", "orange"
"Strawberry", "red"
"Tomato", "red"

这是PHP循环遍历它并按颜色列出:

<?php

if (($handle = fopen('demo.csv', "r"))) {
    $prev = false;
    while (($data = fgetcsv($handle, 1000, ","))) {
        if ($prev !== $data[1]) {
            $prev = $data[1];
            echo '<p><b>' . $prev . '</b></p>';
        }
        echo $data[0] . '<br>';
    }
}
fclose($handle);

?>

这是HTML中的输出(我在这里添加了一些换行符以便正确显示)

<p><b>yellow</b></p>
Banana<br>
Lemon<br>
<p><b>orange</b></p>
Orange<br>
<p><b>red</b></p>
Strawberry<br>
Tomato<br>

(如果CSV没有按颜色分组,则需要采用不同的方法。)