$arr = [
['name'=>'zhangsan','age'=>18,'class'=>1],
['name'=>'lisi','age'=>18,'class'=>2],
['name'=>'wangwu','age'=>20,'class'=>2],
['name'=>'xiaoming','age'=>20,'class'=>4],
['name'=>'hello','age'=>20,'class'=>5],
];
<?php
/*********主调函数,判断排序规则,并分发任务*********/
function main($data, $par) {
$par==='age' ? $par2='class' : $par2='age';
$result = pushArr($data, $par);
$str = '';
$str.=getStyle($par, $par2);
$str.=getTable($result, $data, $par2);
echo $str;
}
/*****统计分组总数,各组成员数及排序规则,插入三维数组*****/
function pushArr($arr, $x, $y='num_') {
$i = $j = 1;
$pushed[$y.$arr[0][$x]] = [$arr[0][$x], $j];
for(; $i<count($arr); $i++) {
if($arr[$i][$x] == $arr[$i-1][$x]) {
$pushed[$y.$arr[$i][$x]][1]++; continue;
}
$pushed[$y.$arr[$i][$x]]=[$arr[$i][$x], $j];
}
return array_values($pushed);
}
/********************生成层叠样式表********************/
function getStyle($par, $par2) {
return "<style>div{height:100%;display:table;position:relative;left:50%;margin-left:-115px;}table{display:table-cell;vertical-align:middle;text-align:center;}th,td{width:70px;border:1px solid #ccc;background-color:#eee;}
</style><div><table><tr><th>".$par."</th><th>name</th><th>".$par2."</th></tr>";
}
/******************根据统计数据生成表格******************/
function getTable($result ,$arr, $par2) {
$str = '';
for($i=$j=0; $j<count($result); $j++) {
for($k=0; $k<$result[$j][1]; $k++) {
$str.="<tr>";
if (!$k) {
$str.="<td rowspan='".$result[$j][1]."'>".$result[$j][0]."</td>";
}
$str.="<td>".$arr[$i]['name']."</td><td>".$arr[$i][$par2]."</td></tr>";$i++;
}
}
$str.="</table></div>";
return $str;
}
/*****数据库中取出的有序数组(根据某个字段排序)*****/
$arr = [
['name'=>'zhangsan','age'=>18,'class'=>1],
['name'=>'lisi','age'=>18,'class'=>2],
['name'=>'wangwu','age'=>20,'class'=>2],
['name'=>'xiaoming','age'=>20,'class'=>4],
['name'=>'hello','age'=>20,'class'=>5],
];
/********运行程序********/
main($arr, 'age');
- 如果我把
age
,参数改成class
,同时还得把3改成2才能看出效果