使用PHP从CSV文件中提取一系列行

使用PHP从CSV文件中提取一系列行,php,csv,Php,Csv,我对PHP非常陌生,一直在尝试与css结合,将CSV文件转换为我网站上的表格。我想知道您是否可以选择仅显示CSV文件中的一系列行,例如第5行到第20行,并找到下面显示某些列的代码 是否有一种简单的方法来切换此选项以显示选定的行 <?php $row = 1; if (($handle = fopen("donors.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)

我对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);
 }
 ?>

选择一系列行:

我从一个旧项目中修改了这段代码,但它应该可以工作

<?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,您可以看到此

我希望它能帮助你

编辑

修复了一些缺失的
。添加了结果的图片


我不确定是否理解您要显示的内容

但在测试网站上,我添加了一个表格,其中显示了一系列线条

以下是此表的代码:

echo "<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>
      <link rel=\"stylesheet\" type=\"text/css\" href=\"test.css\">";
$file = '/var/www/test/test.csv'; 
echo "<h1><b>Lines X to Y</b></h1>";
echo "<table>";                     //create the html table
$x=2;       //define the first line to display
$y=4;       //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<=26) {                  //loop to extract rows 5 to 20
      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>";

echo "<h1><b>content of the file</b></h1>";
foreach ($lines as $line) {         //loop to fill your table with csv data
  echo "$line<br/>" ;   
}
echo”
";
$file='/var/www/test/test.csv';
回显“X到Y行”;
回声“//创建html表
$x=2//定义要显示的第一行
$y=4//定义要显示的最后一行
$line_计数器=0;
foreach($line as$line){//循环使用csv数据填充表
如果($x1)使用以下函数将CSV文件提取到数组中(源:)

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> ... 
$data=csv\u to\u数组($file,$delimiter);
回显“您的表格标题内容”;/。。。
//第一行编号为1
$from_row=2;//秒
$to_row=50;
//第一行编号为0
对于($i=从第1行;$i<$到第1行;$i++)
{
echo“”;//开始行
//现在,CSV文件的每一行都是一个数组,由fileds=>值组成
//所以现在您要处理的是列
foreach($data[$i]作为$key=>$value)
{
回显“$value.”;
}
echo”“;//结束行
}
回显“您的表尾内容”;//。。。

从这里开始,我想您可以随心所欲地使用CSS来设置表格的样式。重要的是,如果您想要表格标题,您可以使用保存在第一行的列名称的CSV文件为函数提供信息。

谢谢您的回复。我尝试了您的建议,但我遇到了一个错误:“解析错误:语法错误,意外的T_FOREACH,在第15行的“我的php文件路径”中应为”“或”“;”“。有什么想法吗?差不多,但不完全。我不再得到最初的错误,但我现在得到的只是一个没有数据的小表?我相当确定我的CSV文件被找到了,并且尝试了几件事情都没有成功?我不能告诉你出了什么问题。你能提供你正在使用的代码吗(如果你做了一些更改)。和csv文件的至少一行,以检查正在进行的操作。您会得到一个没有数据的小表。您可以检查分隔符是否真的是一个
。如果不是,您必须在
$expl=explode(,,,,$line)行中更改它;
我已将建议的代码分别放入php文件和css文件中。我更改了csv路径以指向我的csv文件:

$file='csv/test.csv';


我的csv文件也是一个测试文件,看起来像这样:

aaaa、bbbbbb、ccc、ddddd、eeee
11112222344555
11122233344556
11132224333544465557

结果如下:是一个指向测试网站的链接。因为我不能发布IP链接,所以答案是…很抱歉延迟回复-这非常有效,谢谢。实际上,这有一个问题-它无法识别CSV文件中的引号,即它显示它们,而不是将它们视为entri周围的标记有没有办法将fgetcsv命令放入代码中来解决这个问题?
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;
}
$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> ...