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


How do I assign a class to all table cells containing a particular string?

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

此表的四个特定列将始终包含以下字符串之一:'red', 'green', 'yellow'和'grey'。我试图在PHP中编写一个脚本,查找包含字符串"绿色"的所有表单元格,例如,并分配该表单元格一个名为"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'和'grey'总是在名称以'qc_'开头的4个单元格中找到,因此qc_gsr, qc_hr, qc_acz, qc_bre。其他4列不包含任何颜色字符串。

我希望我提供的信息足够清晰,可以让别人找出我一直遇到的问题。

试试这样:

<?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> ';
    }
?>

至少可以这么说,这不是一项容易的任务,但我认为您可以通过一些良好的基于数组的迭代以及使用array_keys、implode和preg_match函数来完成它。基本上,目标是创建一个关联数组,将关键字链接为键,并将所需的类链接为值。然后将它们连接起来,形成一个形式为#'b(key1|key2|key3)'b#i的正则表达式,该表达式将在字符串中搜索任何关键字。使用preg_match的$matches参数,我获得了实际匹配的文本,并使用strtolower函数将其转换为小写,并使用$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_字段将只包含一个必要的关键字。
  • 我认为必要的关键字是在那里自己(即,你不会希望"黄腹"匹配)

我没有假设一个顺序到您现有的$row6数组。虽然选择语句可能隐含了一些顺序,这将消除$keys变量,并允许您将foreach($keys as $key)更改为foreach ($row6 as $key => $value),然后您可以将任何$row6[$key]更改为value

EDIT:要直接插入img标签,请执行以下操作:

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