2

CSV ファイルから情報を取得し、特定の行と列のみを表示するテーブルに変換する PHP ファイルがあります。

ただし、CSV ファイルには、引用符で囲まれたカンマとスペースを含むエントリが含まれています。私の PHP ファイルは、コンマのためにこれらのエントリを 2 つに分割し、引用符を使用する代わりに引用符を表示して、これがコンマとスペースを含むフィールドであることを示しています。

たとえば、CSV ファイルは次のようになります。

AA,BB,"Surname, Initial",CC,DD,EE

「姓とイニシャル」は結果テーブルの同じフィールドにあるはずですが、代わりに 2 つのフィールドが作成されています。

CSVファイル自体をいじるのではなく、PHPコードでこれを解決したいと本当に思っています。コードは次のとおりです。

echo "<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>
      <link rel=\"stylesheet\" type=\"text/css\" href=\"test.css\">";
$file = 'CSV/test.csv';   
$lines = file($file);
if (file_exists($file)){
  //echo "$file exists<br/>"; 

echo '<table>';                     //create the html table
$x=2;       //define the first line to display
$y=20;       //define the last line to display
$line_counter=0;
foreach ($lines as $line) {         //loop to fill your table with csv data
  if($x<=$line_counter && $line_counter<=$y)
  {
    $expl = explode(",", $line);      //explode each line on "," to create the rows
    echo "<tr>";                      //create each line of your table
    $c=0;
    while ($c<=47) {                  //loop to extract columns 2 to 47
      if(($c % 2) == 1){              //odd  rows
        echo "<td class=\"odd\">".$expl[$c]."</td>";
      }
      elseif(($c == 0)){
        echo "<td class=\"even\">".$expl[$c]."</td>";
      }
      else{
        echo "<td class=\"even\">".$expl[$c]."</td>";    //even rows
      }
      $c++;
    }
    echo "</tr>";
    $x++;
  }
  $line_counter++;
}
echo "</table>";
}
4

1 に答える 1

1

組み込みfgetcsv()関数は、適切な CSV 形式を処理する必要があります。区切り文字と予想される引用タイプの両方を変更できるパラメーターがあります。CSV が壊れていない場合、この関数は正しく解析する必要があります。独自のパーサーに置き換えて、必要に応じて CSV 形式に合わせてパラメーターを微調整し、代わりに結果の配列をループしてみてください。

http://www.php.net/manual/en/function.fgetcsv.php

于 2013-08-16T20:31:33.570 に答える