2010-11-03 2 views
0

Я не могу заставить это работать должным образом, мне нужно, чтобы программа отображала записи в файле, если $ records [$ row] [2] совпадает с предыдущим, это должно повторите класс 'field' с новыми $ records [$ row] [2], иначе он должен начать новый #row. Пожалуйста помоги!список через файл с помощью цикла while

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); 

}

ответ

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 не сгруппирован по цветам, вам понадобится сиситемы аренда.)

+0

Мой CSV сгруппирован. Это то, что я получаю от использования кода: «желтый» Banana «желтый» Лимонный «оранжевый» Оранжевый «красный» Клубника «красный» Томатный Хотя мне это нужно чтобы выглядеть так: всякий раз, когда $ data [1] совпадает с предыдущим, мне нужна эта запись, сгруппированная вместе с предыдущей. Banana «желтый» Лимон «желтый» оранжевый «оранжевый» Клубника «красный» Томат «красный» – MG1

+0

Я изменил код, чтобы попытаться сделать это, но его до сих пор не работает. Его никогда не вошёл во внутренний цикл. Введите код: if (($ handle = fopen ('demo.csv "," r "))) { $ prev = false; while (($ data = fgetcsv ($ handle, 1000, ","))) { print 'Сравнение'. $ prev. 'to'. $ данных [1]; if ($ data [1] == $ prev) { \t print 'Предыдущая из той же категории
'; \t печать 'Prev'. $ prev.'and Current: '. $ data [1]. '
'; $ prev = $ data [1]; \t} \t Печать «Предыдущая - это не то же самое
'; \t печать 'Prev'. $ prev.'and Current: '. $ данных [1]; \t $ prev = $ data [1]; \t \t } } fclose ($ handle); – MG1

+0

Я добавил вывод, который я получил. Это отличается от вашего.Если вы используете один и тот же код, вы можете посмотреть на набор символов, который использует ваша ОС и/или версия PHP. – dyve

Смежные вопросы