список через файл, используя цикл while - PullRequest
0 голосов
/ 03 ноября 2010

Я не могу заставить это работать должным образом, мне нужна программа для просмотра списка записей в файле, если $ records [$ row] [2] совпадает с предыдущим, он должен повторить класс 'field' с new $ records [$ 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 голосов
/ 03 ноября 2010

Прежде всего, вы, кажется, предполагаете, что ваш 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 не был сгруппирован по цвету, вам нужен другой подход.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...