【问题标题】:How do I assign a class to all table cells containing a particular string?如何为包含特定字符串的所有表格单元格分配一个类?
【发布时间】:2013-06-14 14:37:19
【问题描述】:

我正在为一家刚开始工作的公司开展一个项目,但在使用我被分配创建的数据可视化工具时遇到了障碍。我正在使用 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 列从不包含任何颜色字符串。我希望我提供的信息足够清楚,以便有人找出我一直遇到的这个问题。

【问题讨论】:

    标签: php html string html-table


    【解决方案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> ';
        }
    ?>
    

    【讨论】:

    • 感谢您的回答杰西卡,我是一个新手开发人员,所以更全面的回答将更加感激。如果不是插入列的键名,而是要插入一个带有该单元格中包含的字符串颜色的圆圈,我会怎么做?
    • javascript 对这项任务更有用吗?
    • 然后让 PHP 生成图像所需的 HTML。假设您已经创建了 4 张图片。
    • 我有,如果替换字符串 'green' 的图像是 green_circle.png,你能告诉我我该怎么做吗
    • 回声'&lt;td class="'.$row6[$key].'"&gt;&lt;img src="'.$row6[$key].'_circle.png"&gt;&lt;/td&gt;';
    【解决方案2】:

    至少可以说,这不是一件容易的事,但我认为你可以通过一些好的基于数组的迭代以及使用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 =&gt; $value),然后您可以将任何 $row6[$key] 更改为只是 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>
    

    【讨论】:

    • 现在如果我的图像文件被称为 green_circle.png 用于绿色字符串替换,我该如何进行。 qc_ 字段只包含其中一个关键字,并且关键字是独立的
    • @user2479631 这不是您在问题中真正提出的问题。但我会幽默你。您可以直接通过 php 来实现,也可以通过带有 before 伪元素的 css3 来实现。如果你想用css3来做,我认为它超出了这个问题的范围。我很快就会用新的 PHP 更新。
    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2019-06-22
    • 2021-10-06
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多