2017-06-04 102 views
0

这是一个简单的逻辑问题,但我有一个心理障碍。我行的分组如下: enter image description here分组交替行颜色与变化

注意以下事项:

  • 组#1有2条记录
  • 组#2有2条
  • 组#3有1个记录
  • 组#4有2条记录
  • 组#5有1条记录
  • 组#6有2条

我希望每个组中的每个记录有相同的背景色组中的其他记录,但是从之后的下一个分组不同的背景颜色。所以,我想实现的是:

  • 在第1组两个记录应该有一个白色背景颜色。
  • 组2中的两条记录都应该有一个灰色背景颜色。
  • 组3中的唯一记录应该有白色背景色。
  • 组4中的两条记录都应该有一个灰色背景颜色。

...等等。因此,不是每个记录的bgcolor交替显示的典型交替行颜色,我希望每个组的bgcolor交替,而每个组内的颜色保持一致。

我现在的逻辑做到这一点:

if($gameID != $previousGameID) 
    $rowColor = "#ffffff"; 
else 
    $rowColor = "#F0F0F0"; 

虽然该代码是PHP,这个问题是不是唯一的PHP,它只是一个逻辑问题,这就是为什么我标记用PHP,C#这个问题, JS(我知道的3种语言)。我上面的代码是错误的,因为它导致背景颜色更改为每个记录,而不是为每组记录。每组中的记录具有相同的游戏ID,并且该游戏ID将与所有其他组不同。所以游戏ID是解决这个小难题的关键之一,但我无法解决这个问题。

注意:您不能假定每个分组将具有1个或2个记录。尽管我的例子没有显示,但在极少数情况下,组中会有3条记录(在这种情况下,所有3条记录的游戏ID都相同)。

任何想法?

回答

1

当前逻辑的问题是,即使gameID未更改,您也总是更改$rowColor

创建一个alternateColor()函数,该函数在调用时在灰色和白色之间更改$rowColor

然后更新您条件

if($gameID != $previousGameID) 
    alternateColor(); 

,然后使用更新后的$rowColor

此解决方案适用于任何类型的ID(数字,字符串等)。一个简单的情况下将是数字顺序ID的,那就是:1,2,3等。在这种情况下,逻辑可以是:

if ($gameID % 2 == 0) 
    $rowColor = "#ffffff"; 
else 
    $rowColor = "#F0F0F0"; 

也就是说,是一种基于以下事实的ID是奇数还是偶数,选择相应的颜色。

UPDATE

关于顺序ID,我并不意味着你的ID是连续的。我暗示如果他们,比模数解决方案就够了。功能方法将适用于任何类型的ID。

由于alternateColor()一个例子,考虑这个(C#):

您的逻辑是在类中,创建一个实例方法AlternateColor,并确保您rowColor变量是一个实例级的变量:

private string rowColor == "#ffffff"; // let's start with white 

private void AlternateColor() 
{ 
    this.currentColor = this.currentColor == "#ffffff" ? "#F0F0F0" : "#ffffff"; 
} 

现在,每当您拨打AlternateColor时,它将在两种颜色之间替换rowColor。这在当前gameID更改时完成。

更新2

不知道有关以下PHP的正确性,但你应该得到的想法:

class Games { 
    private var $rowColor; 

    private function alternateColor(){ 
    $this->$rowColor = ($this->$rowColor == "#ffffff" ? "#F0F0F0" : "#ffffff"); 
    } 

    public function theFuncWhereYouOutputTheTable(){ 
    ... 

    if($gameID != $previousGameID) 
     $this->alternateColor(); 

    // use $rowColor afterwards 
    ... 
    } 

} 
+0

我没跟着。游戏ID很少按顺序排列,有时它们之间存在差距。他们在一个小组内总是一样的,但就是这样。我不是故意在我的屏幕截图中暗示1,2,3,4,5,6是gameID--他们不是。我只是试图说明有分组。你能给我一个你的'alternateColor()'函数代码的例子,以及将传入的参数吗?谢谢! – HerrimanCoder

+0

@HerrimanCoder请参阅上面的更新。 – m1kael

+0

是的,这很有效,非常感谢你的澄清回应。尽管我仍然困惑,为什么在一个函数中进行切换(将颜色视为一个全局对象)与进行内联操作有任何不同,这取决于gameid检查。显然你的方式有效,而我的方式没有,但我仍然困惑为什么。 – HerrimanCoder

1

设置一个全局变量来存储第一色,说$ rowColor =“#ffffff”。 然后在循环

if($gameId != $previousGameId) 
{ 
    alternateColor(); 
} 

再定义,

function alternate() 
{ 
    if($rowColor== "#ffffff") 
    { 
     $rowColor= "#FOFOFO"; 
    } 
    else 
    { 
     $rowColor= "$ffffff"; 
    } 
} 

这应该工作!