0

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

此表的四个特定列将始终包含以下字符串之一:“red”、“green”、“yellow”和“grey”。例如,我正在尝试用 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' 和 'grey' 总是出现在名称以 'qc_' 开头的 4 个单元格中,因此 qc_gsr、qc_hr、qc_acz、qc_bre。其他 4 列从不包含任何颜色字符串。我希望我提供的信息足够清楚,以便有人找出我一直遇到的这个问题。

4

2 回答 2

1

尝试这样的事情:

<?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> ';
    }
?>
于 2013-06-14T14:40:10.837 回答
0

至少可以说,这不是一件容易的事,但我认为您可以通过一些好的基于数组的迭代以及使用array_keysimplodepreg_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_字段仅包含必要的关键字之一。
  • 我假设必要的关键字是单独存在的(即你不希望 `yellowbellied' 匹配)

我没有假设您现有的 $row6 数组的顺序。尽管 select 语句可能暗示了某种顺序,这将消除$keys变量,并允许您更改foreach($keys as $key)foreach ($row6 as $key => $value),然后您可以将 any 更改$row6[$key]为 just value

编辑:要直接插入 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>
于 2013-06-14T14:52:16.960 回答