我正在为一家刚刚开始工作的公司做一个项目,并且在使用分配给我的这个数据可视化工具时遇到了障碍。我正在使用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>