使用php循环进行简单分组?

时间:2011-11-11 20:32:50

标签: php while-loop

我正在输出费率表。每个费率期间都有每日费率和每周费率,但费率期限保持不变。

所以我试图在两次设置之后改变背景颜色。所以基本上,表格将显示:

Date 1 - Weekly Rate
Date 1 - Daily Rate
<change bg color>
Date 2 - Weekly Rate
Date 2 - Daily Rate
<change bg color back to original>

目前,我在样式表中为背景颜色设置了两种样式。我正在使用的代码给了我交替的行。我只是不明白为什么它会改变每一个而不是每一个其他人!

要做到这一点,我必须将一个Date1与Date2进行比较。 (由于我不想进入的原因,我无法每两次迭代更改一次。)

这是我的代码到目前为止在while循环中。救命!谢谢你。

if ($previous !== $row[datefrom])
{       
    $thecolor = "bg1";
} 
else 
{
    $thecolor = "bg2";
}

echo "<tr class=\"".$thecolor."\"> \n";
echo "<td>" .  $row[datefrom] . " - " . $row[dateto]. "</td> \n";
echo "<td>" .  str_replace(" 3-5","",$row[Ratetype]) . "</td> \n";
echo "<td>$" .  $row[Rate] . "</td> \n";
echo "</tr> \n";

$previous = $row[datefrom];

2 个答案:

答案 0 :(得分:1)

如果我们为每次迭代设置当前日期 prev 的状态,我们可以很容易地看到这个原因:

 1. date1, prev = nothing => bg1
 2. date1, prev = date1   => bg2
 3. date2, prev = date1   => bg1
 4. date2, prev = date2   => bg2

解决此问题的一种简单方法是还要考虑背景的状态。我会把它留给你考虑一下。

答案 1 :(得分:1)

您还必须记住上次使用的背景颜色,如果没有它,背景将仅更改为组中的第一个条目。例如:

$use_original_bg = TRUE;

for(/*...*/){
    if ($previous !== $row[datefrom]) {
        $use_original_bg = !$use_original_bg; 
    }
    $thecolor = $use_original_bg?"bg1":"bg2";
}