如何使用php将特定csv行的颜色更改为行尾

时间:2016-09-28 16:21:20

标签: php csv

我想将101行的颜色更改为400(最后一行),但我不知道如何,这里是我的代码:

    echo "<html><body><table>\n\n";
$f = fopen("Productos.csv", "r");
while (($line = fgetcsv($f,1000,";")) !== false) {
        echo "<tr>";
        foreach ($line as $k => $cell) {
            $color = ($k == 4) ? 'red' : 'white';
            $class = "style='background-color: $color'";
            echo "<td $class>"  . htmlspecialchars($cell) . "</td>";
        }
        echo "</tr>\n";
}
fclose($f);
echo "\n</table></body></html>";

1 个答案:

答案 0 :(得分:0)

这种东西有不同的方法,没有对错,一切都取决于具体情况。但是,存在一些通用协议,例如,样式规则应该与标记分开实现。

我在下面给出两个例子。根据您的问题,我了解您要更改病房中某个表的颜色。但是,在您的代码中,您似乎可以使用实际的表单元。我决定将行颜色从白色更改为绿色以用于演示目的,行索引为10。为了证明在这种方法中也很容易考虑列,我还在那些绿色行中将第三列黄色着色。显然,这只是一个粗略的例子。

选项1:我眼中最优雅的方法是将样式规则移动到样式表文件中,依赖任何特定的标记细节

PHP:

<?php $fileHandle = fopen('productos.csv', 'r'); ?>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="productos.css">
  </head>
  <body>
    <table>
      <tbody>
<?php while (($columns = fgetcsv($fileHandle, 1000, ';')) !== false) { ?>
        <tr>
<?php foreach ($columns as $colId => $colVal) { ?>
          <td><?=htmlspecialchars($colVal)?></td>
<?php } ?>
        </tr>
<?php } ?>
      </tbody>
    </table>
  </body>
</html>

CSS:

tr td {
  background-color: white;
}
tr:nth-child(n+10) td {
  background-color: green;
}
tr:nth-child(n+10) td:nth-child(3) {
  background-color: yellow;
}

优点:非常干净和紧凑的标记,所有样式逻辑和规则在一个地方。看看我创建的这个fiddle是为了便于理解......

选项2:更常见的方法是使用类名丰富标记,但要在样式表文件中保持实际样式规则分开:

PHP:

<?php $fileHandle = fopen('productos.csv', 'r'); ?>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="productos.css">
  </head>
  <body>
    <table>
      <tbody>
<?php while (($columns = fgetcsv($fileHandle, 1000, ';')) !== false) { ?>
        <tr class="<?= (++$rowId>9)? 'high' : 'low' ?>">
<?php foreach ($columns as $colId => $colVal) { ?>
          <td class="<?= (++$colId===3)? 'yellow' : 'green' ?>"><?=htmlspecialchars($colVal)?></td>
<?php } ?>
        </tr>
<?php } ?>
      </tbody>
    </table>
  </body>
</html>

CSS:

tr td {
  background-color: white;
}
tr.high td {
  background-color: green;
}
tr.high td.yellow {
  background-color: yellow;
}

优点:易于阅读和理解。这是演示fiddle ...