2016-05-20 2 views
2

У меня есть CSV-файл, который преобразуется в HTML-таблицу с помощью PHP (с помощью Джоби Иосифа здесь): Dynamically display a CSV file as an HTML table on a web pageCSV-файл, чтобы отделить HTML таблицу, основанную на колонке Значение

Однако, я хотел бы поставить данные в отдельные таблицы и контейнеры div на основе значений в первых двух столбцах. Так что, если это мой CSV данные:

League,Team,Date,Opponent,Result 
american,MIN,May 3,UTA,W 
american,MIN,May 4,SEA,L 
american,SAC,May 3,DAL,L 
american,SAC,May 4,TOR,W 
national,NYN,May 5,BAL,L 
national,NYN,May 7,MIA,W 
national,DET,May 6,DEN,L 
national,DET,May 7,POR,L 

Там будет четыре таблицы создана (MIN, SAC, Нины, и DET), и они будут введены в контейнер диву, что я уже создал, «американский-контейнер «для первых двух и« национальный контейнер »для вторых двух. В идеале каждая таблица имела бы две строки заголовка - имя команды и метки столбца - и данные даты/противника/результата. Ниже приводится решение Джоби, которое ставит csv в одну таблицу:

function jj_readcsv($filename, $header=false) { 
$handle = fopen($filename, "r"); 
echo '<table>'; 
//display header row if true 
if ($header) { 
    $csvcontents = fgetcsv($handle); 
    echo '<tr>'; 
    foreach ($csvcontents as $headercolumn) { 
     echo "<th>$headercolumn</th>"; 
    } 
    echo '</tr>'; 
} 
// displaying contents 
while ($csvcontents = fgetcsv($handle)) { 
    echo '<tr>'; 
    foreach ($csvcontents as $column) { 
     echo "<td>$column</td>"; 
    } 
    echo '</tr>'; 
} 
echo '</table>'; 
fclose($handle); 
} 
jj_readcsv('test.csv',true); 

Спасибо за любую помощь.

+0

не забудьте отметить мой ответ, как решить, если проблема решена сударь :) –

+0

Конечно, но я Я все еще пытаюсь понять его часть. – Beau

ответ

2

Это должно работать:

<?php 
$csv = "League,Team,Date,Opponent,Result\namerican,MIN,May 3,UTA,W\namerican,MIN,May 4,SEA,L\namerican,SAC,May 3,DAL,L\namerican,SAC,May 4,TOR,W\nnational,NYN,May 5,BAL,L\nnational,NYN,May 7,MIA,W\nnational,DET,May 6,DEN,L\nnational,DET,May 7,POR,L"; 
$csv_array = explode("\n", $csv); 
$tables = []; 
foreach($csv_array as $key => $value) { 
    if ($key == 0) { 
     continue; 
    } 
    $line = explode(',', $value); 
    if (array_key_exists($line[1], $tables)) { 
     $tables[$line[1]][] = $line; 
    } else { 
     $tables[$line[1]] = [$line]; 
    } 
} 

foreach ($tables as $key => $value) { 
    echo '<h1> ' .$key. ' </h1>'; // YOUR TITLE (Team) 
    echo "<table>"; 
    echo '<tr>'; 
    foreach (explode(',', $csv_array[0]) as $keyHeader => $valueHeader) { 
     if (in_array($keyHeader, [0, 1])) { 
      continue; 
     } 
     echo "<th>$valueHeader</th>"; 
    } 
    echo '</tr>'; 
    foreach ($value as $keyRow => $valueRow) { 
     echo '<tr>'; 
      foreach ($valueRow as $keyValue => $valueValue) { 
       if (in_array($keyValue, [0, 1])) { 
        continue; 
       } 
       echo "<td>$valueValue</td>"; 
      } 
     echo '</tr>'; 
    } 
    echo '</table>'; 
} 

Вот что я получаю: Jsfiddle

+0

Большое спасибо, Sofiene, но первые два столбца не должны быть частью данных таблицы. Первый столбец предназначен для того, чтобы сказать, какой div включить, в то время как вторая строка заголовка над метками столбца, например: «NYN
Дата Противник Результат
5 мая BAL L' – Beau

+0

@Beau i обновил код;), я ставлю лигу в H1 над столом :) –

+0

@Beau проблема решена? –

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