1

私は PHP に非常に慣れていないので、css と組み合わせて CSV ファイルをサイトのテーブルに変換することを試しています。CSV ファイルの行の範囲 (行 5 から 20 など) のみを表示するように選択できるかどうか疑問に思ったところ、特定の列を表示する以下のコードが見つかりました。

代わりに選択した行を表示するように切り替える簡単な方法はありますか?

<?php
 $row = 1;
 if (($handle = fopen("donors.csv", "r")) !== FALSE) {
      while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    if ($row == 1) {
        echo '<tr>';
    }else{
        echo '<tr>';
    }

    for ($c=0; $c < $num; $c++) {

        if(empty($data[$c])) {
           $value = "&nbsp;";
        }else{
           $value = $data[$c];
        }
        if ($row == 1) {

             echo '<td style="border-top: 1px solid rgb(111,180,224); border-left: 1px solid rgb(111,180,224); border-bottom: 1px solid rgb(111,180,224);"  align="left" bgcolor="#0066cc" height="36" valign="middle" ><b><font color="#ffffff" size="2">&nbsp;&nbsp;'.$value.'&nbsp;&nbsp;</font></b></td>';
        }else{


            echo '<td style=" border-bottom: 1px solid rgb(111,180,224);" sdval="9" sdnum="1040;" align="left" bgcolor="#ffffff" height="25"  valign="middle"><font color="#000000" size="2">&nbsp;&nbsp;'.$value.'&nbsp;&nbsp;</font></td>';
        }
    }

    if ($row == 1) {
        echo '</tr>';
    }else{
        echo '</tr>';
    }
    $row++;
   }

  echo '</tbody></table>';
echo '</center>';   
    fclose($handle);
 }
 ?>
4

3 に答える 3

0

行の範囲を選択します。

古いプロジェクトからこのコードを採用しましたが、うまくいくはずです。

<?php 
echo "<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>
      <link rel=\"stylesheet\" type=\"text/css\" href=\"test.css\">";
$file = '/volume1/web/Print data.csv';   
$lines = file($file);
if (file_exists($file)){
  //echo "$file exists<br/>"; 
  echo "<table>";                      //create the html table
  foreach ($lines as $line) {         //loop to fill your table with csv data
    $expl = explode(",", $line);      //explode each line on "," to create the rows
    echo "<tr>";                      //create each line of your table
    $c=5;
    while ($c<=20) {                  //loop to extract rows 5 to 20
      if(($c % 2) == 1){              //odd  rows
      echo "<td class=\"odd\">".$expl[$c]."</td>";
      }
      else{
        echo "<td class=\"even\">".$expl[$c]."</td>";    //even rows
      }
      $c++;
    }
    echo "</tr>";
  }
  echo "</table>";
}
else{
  echo "file is not here: $file";
}
?>

CSS の場合:

このコードで外部.cssファイルを使用する必要があります

.odd {
    border-top: 1px solid rgb(111, 180, 224);
    border-left: 1px solid rgb(111, 180, 224);
    border-bottom: 1px solid rgb(111, 180, 224);
    background:#0066cc;
    color:white;
    font-weight:bold;
    font-size:12px;
}
.even {
    border-bottom: 1px solid rgb(111, 180, 224);
    background: #ffffff;
    color:#000000;
    font-size:12px;
}

このcssを確認するには、このjsfiddleを見ることができます

お役に立てば幸いです。

編集

欠落している を修正しました;。結果画像を追加しました

結果

于 2013-08-05T14:58:14.690 に答える
0

1) 以下の関数を使用して CSV ファイルを配列にフェッチします (ソース: jaywilliams @ GIST )

function csv_to_array($filename='', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename))
    return FALSE;

$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
    {
        if(!$header)
            $header = $row;
        else
            $data[] = array_combine($header, $row);
    }
    fclose($handle);
}
return $data;
}

2) 目的の行範囲を反復処理する

$data = csv_to_array($file,$delimiter); 

echo "your table header stuff"; //<table> ... 

//first row numbered as 1 
$from_row = 2; //second
$to_row = 50;

//first row numbered as 0 
for($i = from_row-1; $i< $to_row-1; $i++) 
{
   echo "<tr>"; //start row

   //now, every row of the CSV file is an array and consists of fileds=>values
   //so now you are dealing with columns   

   foreach($data[$i] as $key=>$value
   {
          echo "<td>" . $value . "</td>"; 
   }
    echo "</tr>"; //end row
}

echo "your table footer stuff"; //</table> ... 

ここからは、CSS を使用して表のスタイルを設定することで、好きなことを行うことができると思います。重要なのは、テーブルヘッダーが必要な場合は、最初の行に保存された列名を持つ CSV ファイルを関数に供給することができるということです。

于 2013-08-09T10:04:26.433 に答える