如何为包含特定字符串的所有表格单元格分配类?

时间:2013-06-14 14:37:19

标签: php html string html-table

我正在为一家刚刚开始工作的公司开展一个项目,并且我已经分配了这个数据可视化工具。我使用PHP从MySQL数据库中提取信息并将数据嵌入到HTML-CSS表中。

此表的四个特定列将始终包含以下字符串之一:“red”,“green”,“yellow”和“gray”。我试图在PHP中编写一个脚本,查找包含字符串'green'的所有表格单元格,并为该表格单元格指定一个名为'green_circle'的类。我的计划是在该类的所有单元格中放置一个绿色圆圈(最有可能是.png)。我希望这样做,以便更有效地查看信息。我想为这四种颜色中的每种颜色做这件事。

这是表体的样子:

                        <tbody>
                            <?php
                                while ($row6 = mysql_fetch_assoc($orl_error)) {
                                    echo '
                                        <tr>
                                            <td>'.$row6["project"].'</td>
                                            <td>'.$row6["participant"].'</td>
                                            <td>'.$row6["reel"].'</td>
                                            <td>'.$row6["machine"].'</td>
                                            <td>'.$row6["qc_gsr"].'</td>
                                            <td>'.$row6["qc_hr"].'</td>
                                            <td>'.$row6["qc_acz"].'</td>
                                            <td>'.$row6["qc_bre"].'</td>
                                        </tr> ';
                                    }
                                ?>
                        </tbody>

字符串'green','yellow','red'和'gray'总是在4个单元格中找到,名称以'qc_'开头,所以qc_gsr,qc_hr,qc_acz,qc_bre。其他4列永远不会包含任何颜色字符串。我希望我提供的信息足够清楚,以便有人能够解决我一直遇到的这个问题。

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

<?php
$keys = array('qc_gsr', 'qc_hr', 'qc_acz', 'qc_bre');
while ($row6 = mysql_fetch_assoc($orl_error)) {
    echo '
    <tr>
        <td>'.$row6["project"].'</td>
        <td>'.$row6["participant"].'</td>
        <td>'.$row6["reel"].'</td>
        <td>'.$row6["machine"].'</td>';
        foreach($keys AS $key){
            echo '<td class="'.$row6[$key].'">'.$row6[$key].'</td>';
        }
    echo '</tr> ';
    }
?>

答案 1 :(得分:0)

至少可以说,这不是一项容易的任务,但我认为你可以通过一个基于数组的基于迭代的迭代来完成它,并使用array_keysimplode和{{ 3}}功能。基本上,目标是创建一个关联数组,将关键字作为键,将所需的类作为值链接。然后我和他们一起制作#\b(key1|key2|key3)\b#i形式的正则表达式,它将在字符串中搜索任何关键字。使用preg_match$matches参数,我获得实际匹配的文本,并使用preg_match函数将其转换为小写,并使用$classes数组将其转换为期望的课程。

<tbody>
    <?php
        $keys = array('project'
            , 'participant'
            , 'reel'
            , 'machine'
            , 'qc_gsr'
            , 'qc_hr'
            , 'qc_acz'
            , 'qc_bre'
        );
        $classes = array('yellow' => 'yellow_square'
            , 'green' => 'green_circle'
        );
        $class_keys = '#\b(' . implode('|', array_keys($classes)) . ')\b#i';
        while ($row6 = mysql_fetch_assoc($orl_error)) {
            echo '<tr>';
                foreach($keys as $key){
                    $class = '';
                    if(preg_match($class_keys, $row6[$key], $match)){
                        $class = $classes[strtolower($matches[0])];
                    }
                    echo "<td class=\"$class\" >".$row6[$key].'</td>';
                }
            echo '</tr> ';
         }
     ?>
</tbody>

为了简洁起见,我做了一些假设:

  • 我认为您的qc_字段只包含一个必要的关键字。
  • 我认为必要的关键字在那里(即你不希望'yellowbellied'匹配)

我没有假设您现有的$ row6数组的订单。虽然select语句可能会隐藏一些订单,这会消除$keys变量,并允许您将foreach($keys as $key)更改为foreach ($row6 as $key => $value),然后您可以更改任何{{1}只需$row6[$key]

编辑:要直接插入img标记,请执行以下操作:

value