PHP实现表格Table动态显示MySQL数据库列(字段)

在原生PHP开发中,有权限控制的地方基本都会有权限不同表格数据显示不同列的问题,如果一个个去IF那是比较麻烦而且费神的一件事。PHP和HTML混编会产生大量的代码冗余导致检查费事麻烦。这里我的一个客户就要求用原生PHP写项目不能用任何框架,没办法涉及到权限控制那只能自己想办法了。

下面是我的实现过程,有相同需要的朋友可以参考下。

完整PHP代码部分

//表格显示方法集合
function F($func,$pm){
	global $func_arr;
	if(function_exists($func)){
		return call_user_func($func,$pm);
	}else{
		return $pm;
	}
}
//----表格列格式化函数
function _fenlei($fenlei){
	global $__fenlei;
	return $__fenlei[$fenlei];
}
function _jindu($jindu){
	global $__jindu;
	return $__jindu[$jindu];
}
function _leixing($leixing){
	global $__leixing;
	return $__leixing[$leixing];
}
function _qepayed($qepayed){
	global $__qepayed;
	return $__qepayed[$qepayed];
}
function _downloaded($downloaded){
	global $__downloaded;
	return $__downloaded[$downloaded];
}
function _flag($flag){
	return "<label class='flag flag".$flag."'></label>";
}
function _time_order($time_order){
	if(intval($time_order)<1){return '';}
	return date('Y-m-d',$time_order);
}
function _time_jiankan($time_jiankan){
	if(intval($time_jiankan)<1){return '';}
	return date('Y-m-d',$time_jiankan);
}
function _banshu($banshu){
	return intval($banshu)===0?'':$banshu;
}
function _edit($id){
	$r = "<a href='order_edit.php?id={$id}' class='edit'>查看</a>";
	if(intval($_SESSION['level'])===10){
		$r.=" <a href='order_del.php?id={$id}' class='edit'>删除</a>";
	}
	return $r;
}
//----列格式化函数


//默认要显示的列
$tablecol = array(
	//函数名			参数名、表头、宽度
	'id'		=>array('id','编号','70'),
	'edit'		=>array('id','修改','100'),
	'flag'		=>array('flag','标记','40'),
	'fenlei'	=>array('fenlei','分类','120'),
	'time_order'=>array('time_order','接单时间','100'),
	'jindu'		=>array('jindu','进度','60'),
	'leixing'	=>array('leixing','类型','60'),
	'lirun'		=>array('lirun','利润','80'),
	'zonge'		=>array('zonge','总额','80'),
	'payed'		=>array('payed','已付款','80'),
	'qepayed'	=>array('qepayed','是否全额付款','100'),
	'qqweixin'	=>array('qqweixin','客户QQ或微信','150'),
	'wangwang'	=>array('wangwang','客户旺旺','120'),
	'xieshou'	=>array('xieshou','写手信息','100'),
	'qikan'		=>array('qikan','发表期刊','120'),
	'timu'		=>array('timu','题目','400'),
	'banshu'	=>array('banshu','版数','70'),
	'time_jiankan'	=>array('time_jiankan','见刊时间','100'),
	'zuozhe'	=>array('zuozhe','作者','100'),
	'zhubian'	=>array('zhubian','主编信息','100'),
	//函数名可以随意起,所以可以做到不重复,参数名可能需要多次引用故不能做key
);

if($ulevel===0){
	//角色1
	$tablecol = array(
		//函数名			参数名、表头、宽度
		'id'			=>array('id','编号','70'),
		'edit'			=>array('id','修改','100'),
		'flag'			=>array('flag','标记','40'),
		'time_order'	=>array('time_order','提交时间','100'),
		'xieshou'		=>array('xieshou','写手昵称','100'),
		'timu'			=>array('timu','题目','400'),
		'downloaded'	=>array('downloaded','是否下载','80'),
	);
}elseif($ulevel===1){
	//角色2
	$tablecol = array(
		//函数名			参数名、表头、宽度
		'id'		=>array('id','编号','70'),
		'edit'		=>array('id','修改','100'),
		'flag'		=>array('flag','标记','40'),
		'fenlei'	=>array('fenlei','分类','120'),
		'time_order'=>array('time_order','接单时间','100'),
		'jindu'		=>array('jindu','进度','60'),
		'leixing'	=>array('leixing','类型','60'),
		'lirun'		=>array('lirun','利润','80'),
		'zonge'		=>array('zonge','总额','80'),
		'payed'		=>array('payed','已付款','80'),
		'qepayed'	=>array('qepayed','是否全额付款','100'),
		'qqweixin'	=>array('qqweixin','客户QQ或微信','150'),
		'wangwang'	=>array('wangwang','客户旺旺','120'),
		'timu'		=>array('timu','题目','400'),		
		'xieshou'	=>array('xieshou','写手信息','100'),
	);
}elseif($ulevel===2){
	//角色3
	$tablecol = array(
		//函数名			参数名、表头、宽度
		'id'		=>array('id','编号','70'),
		'edit'		=>array('id','修改','100'),
		'flag'		=>array('flag','标记','40'),
		'fenlei'	=>array('fenlei','分类','120'),
		'time_order'=>array('time_order','接单时间','100'),
		'jindu'		=>array('jindu','进度','60'),
		'leixing'	=>array('leixing','类型','60'),
		'lirun'		=>array('lirun','利润','80'),
		'zonge'		=>array('zonge','总额','80'),
		'payed'		=>array('payed','已付款','80'),
		'qepayed'	=>array('qepayed','是否全额付款','100'),
		'qqweixin'	=>array('qqweixin','客户QQ或微信','150'),
		'wangwang'	=>array('wangwang','客户旺旺','120'),
		'xieshou'	=>array('xieshou','写手信息','100'),
		'qikan'		=>array('qikan','发表期刊','120'),
		'timu'		=>array('timu','题目','400'),
		'banshu'	=>array('banshu','版数','70'),
		'time_jiankan'	=>array('time_jiankan','见刊时间','100'),
		'zuozhe'	=>array('zuozhe','作者','100'),
		'zhubian'	=>array('zhubian','主编信息','100'),
	);
}
$table_width = 0;
foreach($tablecol as $a=>$b){
	$table_width+=intval($b[2]);
}

完整HTML代码部分

<table cellpadding="3" cellspacing="0" style="width:<?php echo $table_width;?>px;min-width:100%;">
	<thead>
    	<tr>
			<?php
			foreach($tablecol as $k=>$v){
				echo "<th width='{$v[2]}'>{$v[1]}</th>";
			}
			?>
        </tr>
    </thead>
    <tbody>
	<?php foreach($data as $k=>$v){?>
    	<tr class='list'>
			<?php
			$content="";
			foreach($tablecol as $a=>$b){
				$content = F("_$a",$v[$b[0]]);
				echo "<td align='center'>{$content}</td>";
			}
			?>
        </tr>
	<?php }?>
    </tbody>
    <tfoot>
    	<tr>
			<?php
			$colcount = count($tablecol);
			echo "<td colspan='{$colcount}' style='padding-left:30px;'>{$fenye}</td>";
			?>
        </tr>
    </tfoot>
</table>