PHP基于内容的备用行颜色

时间:2016-03-24 20:58:55

标签: php

我在这里和谷歌搜索过,但我找不到可以整合的解决方案。

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

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

因此,John的所有行的背景颜色为row1,Grant row2,然后Perry将再次为row1。

我打算做一个简单的切换并以这种方式交替,但赞助商有20种(并且不断增长)不同的可能性,我想知道是否有更简单的方法。

有没有更简单的方法,或者通过switch语句来实现它?

干杯

2 个答案:

答案 0 :(得分:0)

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

$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>";
}

答案 1 :(得分:0)

以下是执行此类操作的一般方法:

$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>';