Php 如何在从csv获取的HTML表格中嵌入图标?

Php 如何在从csv获取的HTML表格中嵌入图标?,php,html,Php,Html,下面的php代码从.csv文件中提取数据并生成一个HTML表。它很好用。我想知道是否有可能在html表中嵌入一些图标,例如与csv文件中某些特定单词(例如:红色、绿色)对应的红点或绿点(reddot.gif、greendot.gif) 换句话说,在csv文件中,当特定列(例如:第3列)中显示红色或绿色时,应在生成的html文件中显示reddot.gif或greendot.gif 提前谢谢。垫子 <?php $row = 1; if (($handle = fopen("example.cs

下面的php代码从.csv文件中提取数据并生成一个HTML表。它很好用。我想知道是否有可能在html表中嵌入一些图标,例如与csv文件中某些特定单词(例如:红色、绿色)对应的红点或绿点(reddot.gif、greendot.gif)

换句话说,在csv文件中,当特定列(例如:第3列)中显示红色或绿色时,应在生成的html文件中显示reddot.gif或greendot.gif

提前谢谢。垫子

<?php
$row = 1;
if (($handle = fopen("example.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) {
// ------------- head row --------
            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{

// ------------- Generic row -------
            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);
}
?>

请尝试一下

    if(empty($data[$c])) {
       $value = "&nbsp;";
    }else{
       $value = $data[$c];
       switch(strtolower(trim($value))){
       case 'green': $value = '<img src="greendot.gif" '
                             .'alt="green" height="32" width="32">';
                             break;
       case 'red':   $value = '<img src="reddot.gif" '
                             .'alt="red" height="32" width="32">';
                             break;
       // you can add other cases here like blue, triangle etc :)
       }
    }
if(空($data[$c])){
$value=“”;
}否则{
$value=$data[$c];
开关(strtolower(微调($value))){
案例“绿色”:$value='';
打破
案例“红色”:$value='';
打破
//您可以在此处添加其他案例,如蓝色、三角形等:)
}
}

在任何循环的外部声明此函数,仅在if的开头,甚至在脚本的开头或结尾:

function img($img){ return "<img src='{$img}dot.gif'/>";}

如果需要更多颜色,只需按照逻辑将它们添加到preg_replace内部的两个数组中

如果需要向图像添加属性,请将它们添加到声明的函数中


希望它对您有用

OP没有指定这些字段是否只包含带颜色的单词,您至少应该修剪$value,因为逗号分隔的值通常带有空格。如果它是一个与其他单词混合的单词,你应该使用正则表达式来代替它。@aleation把事情复杂化怎么样?让我们添加一个解析器;)。。。无论如何,感谢您的修剪提示,csv中的前导空格和尾随空格很常见。。我在这里给出的答案既不准确也不精确,因为我无法用这里提供的数据知道OP方面。i、 e:图像的路径是任意的,大小是任意的。这里的动机是展示模式。。。谢谢你的关注。它确实不起作用。不指定列的想法并不坏,因此我可以自由使用多个带有图标的列,而无需修改代码,但除此之外,我尝试了代码,并没有给我期望的结果:/继续调整,直到获得所需的结果。到底出了什么问题?正如你在我的回答中看到的,使用正则表达式实际上并不是“过度复杂化”。它的代码要短得多,而且一开始就很有效。我猜在你的代码中,问题在于处理大小写。一个switch case不能有效地比较字符串,我只会使用它来检查代码中的变量值,这样您就可以知道确切的值,而不是来自第三方的数据。我想至少你应该用条带。好吧,它很管用!但是,如果单词“绿色”或“红色”是通用文本的一部分,它会在单词内显示img:,那么您应该只将代码应用于所需的列。假设它是for循环中的第3列:if($c==2){value replacement for images code}
$value = preg_replace(array('/red/i', '/green/i'), array(img('red'), img('green')), $data[$c]);