2016-09-05 12 views
-1

私はこのコードを使ってCSVを取り出し、そこからHTMLテーブルを生成します。CSVからHTMLテーブルを生成する - 不要なカラムを無視する

$idsColumnsWantedという名前のarrayがあります。このテーブルでは、テーブルにデータを表示する列のみを格納する予定です。

残念ながら、列0 &1が表示された後、残念ながら現在の動作は表示されますが、それ以外は表示されません。それ以降はすべてを無視します。

どうしたのですか?おそらく、

<?php 

$idsColumnsWanted = array(0,1,16); 

echo "<table class='table table-bordered'>\n\n"; 

$f = fopen("users.csv", "r"); 

$first_line=false; 

while (($line = fgetcsv($f)) !== false) { 

    // Restart column index 
    $i = 0; 

    $row =""; 

    if($first_line == false) { 
     $row = "<thead><tr>"; 
     $col= "th"; 
    } 
    else { 
     $row = "<tr>"; 
     $col= "td"; 
    } 


    $is_empty = false; 

    foreach ($line as $cell) { 

     // Skips all columns not in your list 
     if (! in_array($i, $idsColumnsWanted)) continue; 

     if ($cell !== '') { 
      $row .= "<".$col.">" . htmlspecialchars($cell) . " </".$col.">"; 
     } else { 
      $is_empty = true; 
     } 

     // Increase index 
     $i++; 

    } 


    if($first_line == false) $row .= "</tr></thead>"; 
    else $row .= "</tr>"; 

    $first_line=true; 

    if ($is_empty) { 
     continue; 
    } else { 
     echo $row; 
    } 

} 
fclose($f); 
echo "\n</table>"; 

?> 
+2

をあなたは '$のIを意味します(!in_array($ I、$ idsColumnsWanted))'の最初の呼び出し 'の後に続けています'そのような場合にインクリメントされることはありません。インクルードされない値として残されます。 –

+2

' foreach($ line as $ i => $ cell) 'がカラムナンバリングを扱うのをなぜ許可しないのですか? –

+0

@マーク・ベーカーそれは2番目の1つは治療を働いた - 答えとして追加してください&私は緑のダニをします。あなたの時間と説明のために本当にありがとうございます:-) – michaelmcgurk

答えて

1

、あなたがそうのようにそれを行うことができます:

<?php 

     $idsColumnsWanted = array(0,1,16); 
     $output    = "<table class='table table-bordered'>\n\n"; 
     $f     = fopen("file.csv", "r"); 
     $csv    = fgetcsv($f); 
     $counter   = 0; 

     while (($line = fgetcsv($f)) !== false){ 
      if($counter == 0){ 
       // BUILD THE TABLE HEADER 
       $output .= "<thead>\n<tr>" . PHP_EOL; 
       foreach($line as $i=>$cell){ 
        // SKIP UNWANTED COLUMNS... 
        if (!in_array($i, $idsColumnsWanted)) continue; 
        if(!empty($cell)) { 
         $output .= "<th>{$cell}</th>" . PHP_EOL; 
        } 
       } 
       // CLOSE THE TABLE HEADER & ITS ROW 
       $output .= "</tr>\n<thead>" . PHP_EOL; 
       // ADD THE TABLE BODY TAG 
       $output .= "</tbody>" . PHP_EOL; 
      }else{ 
       // BUILD THE NORMAL TABLE-ROWS 
       $output .= "<tr>" . PHP_EOL; 
       foreach($line as $i=>$cell){ 
        // SKIP UNWANTED COLUMNS... 
        if (!in_array($i, $idsColumnsWanted)) continue; 
        if(!empty($cell)){ 
         $output .= "<td>" . htmlspecialchars($cell) . "</td>" . PHP_EOL; 
        } 
       } 
       $output .= "</tr>" . PHP_EOL; 
      } 
      $counter++; 
     } 
     // CLOSE THE TABLE BODY AND THE TABLE ITSELF. 
     $output .= "</tbody>" . PHP_EOL; 
     $output .= "</table>" . PHP_EOL; 

     fclose($f); 

     // ECHO THE OUTPUT... 
     echo $output; 
    ?> 
関連する問題