提示:首先这是一个简单的逻辑问题,看似复杂的逻辑起实都是从简单逻辑开始做起的,这也是网页前端显示经常遇到的问题,表格显示时合并列的问题。
一、当前需求
从数据库中查询出相应字段,查询后的数组类似于如下格式。
$data = array(
array('id'=> 1035,'ordernum' => 'AU0036-033-3', 'price' => 1088),
array('id'=> 1035,'ordernum' => 'AU0036-033-4', 'price' => 1088),
array('id'=> 1043,'ordernum' => 'AU0036-033-5', 'price' => 1088),
array('id'=> 77, 'ordernum' => 'AU0036-033-6', 'price' => 777),
array('id'=> 77, 'ordernum' => 'AU0036-033-7', 'price' => 777),
);
要求显示成这样
ID相同时,价格合并列显示
二、开发步骤
正所谓逻辑再简单也是逻辑。也要一步一步做。
1.首先是用到静态代码测试
原来 rowspan可以垂直合并表格列
代码如下(示例):
<table border="2">
<tr>
<td>订单号</td>
<td>生产费用</td>
<td>价格</td>
</tr>
<tr>
<td>AU0036-033-3</td>
<td rowspan="3">1088</td>
<td>666</td>
</tr>
<tr>
<td>AU0036-033-4</td>
<td>666</td>
</tr>
<tr>
<td>AU0036-033-5</td>
<td>666</td>
</tr>
<tr>
<td>AU0036-033-3</td>
<td>1088</td>
<td>666</td>
</tr>
</table>
2.写PHP代码
第一步:计算 $data变量中所有 ID的值一样的数量为多少。
代码如下(示例):
//循环data,并把把id 的值做为key,id值一样的数量做为值
$id_count = array();
foreach( $data as $key=>$val){
$id_count[$val['id']] = $id_count[$val['id']] + 1;
}
这样就计算出了所有ID的值一样的数量,为以key和value的方式,更新到了
i
d
c
o
u
n
t
这个数组中第二步:循环输出
id_count这个数组中 第二步:循环输出
idcount这个数组中第二步:循环输出data数组
定义一个变量
i
=
0
用来记数定一下数组
i=0用来记数 定一下数组
i=0用来记数定一下数组curr_id = array() 用来顺序计录所有数组中id的值
在foreach循环中让curr_id[
i
]
变量跟上次的记录中的
c
u
r
r
i
d
[
i]变量跟上次的记录中的curr_id[
i]变量跟上次的记录中的currid[i-1]判断是否一致。请看代码:
<table border="2">
<tr>
<td>订单号</td>
<td>生产费用</td>
<td>价格</td>
</tr>
<?php
$i = 0;
$curr_id=array();
foreach ($data as $row){
//当循环时,记录$row['id']相同的数量
//记录当前循环次数
$curr_id[$i] = $row['id'];
echo "<br>curr_id=".$curr_id[$i]."===".$row['id']."<br>";
$ii = 1;
//如果curr_id与当前的$row['id']一致
if ( $curr_id[$i-1] == $curr_id[$i] )
{
$ii= $ii + 1;
echo '<br>i='.$i."<br>";
echo 'ii='.$ii."<br>";
echo '<br>=======';
}
?>
<tr>
<td><?=$row['ordernum']?></td>
<td><?=$row['id']?></td>
<?php if ($ii == 1) { ?>
<td rowspan="<?=$id_count[$row['id']]?>"><?=$row['price']?></td>
<?php } ?>
</tr>
<?php
$i++;
} ?>
总结
编程的在于逻辑方法的累积。如果一个逻辑没搞明白,那么就拆分吧。分成多个逻辑。一直到能下手处理为止