自动检测相同条目的数量并根据数量执行行数?

时间:2011-07-23 18:16:27

标签: php html

我想创建一个forloop,它将根据从数据库中获取的数据创建一个表。

获得的结果看起来像这样。

id/cart_id/title/price/quantity
1 / 1     /book1/10.00/ 2
2 / 1     /book2/19.00/ 1

在for循环中,正常创建2个表行来保存这2个结果。但是我想要一个to rowspan并且只显示一次cart_id“1”。

这是我目前的代码

<?php
                for($i = 0; $i < count($history); $i++) {
                    $a = $history[$i]['cart_id'];
                    echo '<tr >';
                    if($history[$i]['cart_id'] == $history[$i]['cart_id']){                     
                    echo '<td rowspan="2">'.$a.'</td>';
                    }
                    echo '<td>'.$history[$i]['title'].'</td>';
                    echo '<td>'.$history[$i]['price'].'</td>';
                    echo '<td>'.$history[$i]['quantity'].'</td>';
                    echo '<td>'.$history[$i]['cart_id'].'</td>';
                    echo '</tr>';
                }
                ?>

修改

original output:
[id:1][book1][19.90][2]
[id:1][book2][10.90][1]

what i wanted: The id row will rowspan according to the number of same ID.Thus showing ony 1 "id:1"

[    ][book1][19.90][2]
[id:1][book2][10.90][1]

如何实现我想要的目标?

1 个答案:

答案 0 :(得分:1)

您可以使用额外的for循环来实现此目的:

<?php
    $lastcart = FALSE ;
    for($i = 0; $i < count($history); $i++) {
        $a = $history[$i]['cart_id'];
        echo '<tr >';
        $rowspan = 0;
        for(
            $j=$i;
            $history[$i]['cart_id'] !== $lastcart &&
            $j < count($history) && 
            $history[$j]['cart_id']==$history[$i]['cart_id'];
            $j++
        ){
            $rowspan++ ;
        }
        if($rowspan > 0){
            $lastcart = $history[$i]['cart_id'] ;
            echo '<td rowspan="{$rowspan}">'.$a.'</td>';
        }
        echo '<td>'.$history[$i]['title'].'</td>';
        echo '<td>'.$history[$i]['price'].'</td>';
        echo '<td>'.$history[$i]['quantity'].'</td>';
        echo '<td>'.$history[$i]['cart_id'].'</td>';
        echo '</tr>';
    }
?>