繁体   English   中英

PHP 基于内容的交替行颜色

[英]PHP alternate row colour based on content

我已经在这里和谷歌上搜索过,但我一直无法找到可以集成的解决方案。

我有从 MySQL 数据库填充的数据行,我想做的是在特定列更改时交替行颜色。 例如:

Sponsor    Name
John       Terry
John       Bob
John       Paul
Grant      Peter
Perry      Toby
Perry      Gerald

所以,John 的所有行的背景颜色都是 row1,Grant row2,然后 Perry 又是 row1。

我打算做一个简单的切换并以这种方式交替它们,但是对于 Sponsor 有 20 种(并且还在不断增加)不同的可能性,我想知道是否有更简单的方法。

有没有更简单的方法,或者是通过 switch 语句来做吗?

干杯

这是实现此目的的一般方法。 如果您了解这个概念,您应该能够对其进行调整以满足您的特定需求。 基本上,在迭代查询结果时跟踪上一项。 如果当前项目不同,则更改颜色。

$sponsors = ['John', 'John', 'Grant', 'Perry', 'Perry'];

$color = null;
$previous_sponsor = null;

foreach ($sponsors as $sponsor) {
    if ($sponsor != $previous_sponsor) {
        $color = $color == 'red' ? 'green' : 'red';
        $previous_sponsor = $sponsor;
    }
    echo "$sponsor $color<br>";
}

这是做这样的事情的一般方法:

$dataArray = array(
    array('sponsor' => 'John',  'name' => 'Terry'),
    array('sponsor' => 'John',  'name' => 'Bob'),
    array('sponsor' => 'Grant', 'name' => 'Peter'),
    array('sponsor' => 'Grant', 'name' => 'Peter'),
    array('sponsor' => 'John',  'name' => 'Bob'),
    array('sponsor' => 'John',  'name' => 'Bob'),
    array('sponsor' => 'Grant', 'name' => 'Peter'),
    array('sponsor' => 'Grant', 'name' => 'Peter'),
    array('sponsor' => 'John',  'name' => 'Bob'),
);

$colors = array('red', 'green', 'blue');
$currentColorIndex = 0;

echo '<table>';
foreach ($dataArray as $key => $data) {
    if ((key($dataArray) > 0) && ($data['sponsor'] !== $dataArray[key($dataArray) - 1]['sponsor'])) {
        $currentColorIndex = ($currentColorIndex + 1) % count($colors);
    }
    echo '<tr style="background-color: ' . $colors[$currentColorIndex] . '">' .
             '<td>' . $data['sponsor'] . '</td>' .
             '<td>' . $data['name'] . '</td>' .
         '</tr>';
}
echo '</table>';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM