当前位置:Gxlcms > PHP教程 > php数据转换为htmltable或者csv文件

php数据转换为htmltable或者csv文件

时间:2021-07-01 10:21:17 帮助过:20人阅读

应用场景:游戏中的很多业务已经迁移到了redis上,但是redis中的数据在运维层面很难展现,通过php-redis将redis中的set或者hash转换为php中的array,然后映射为html中的table


具体展现:


主要设计点:table的基本单位是单元格row_field_node,多个row_field_node组成row_data, tile + 多个row_data = table。因为每个单元格都可能有对应的超链接响应,

所以row_field_node数据结构是这样的:

class row_field_node{        public $data;           //显示的数据        public $action;         //对应的超链接        public $param;          //超链接需要传入的参数        public $target;         //超链接要展现在那个frame中        public function __construct($data, $action, $param, $target)        {                $this->data     = $data;                $this->action   = $action;                $this->param    = $param;                $this->target   = $target;        }}

array中的数组与hash可以输出为html table或者是csv文件,具体实现见代码:

data 	= $data;                      		$this->action 	= $action;                   		$this->param 	= $param;     		$this->target 	= $target;                      	}}class xtable{	private $title_list,$row_list,$fonts,$table_tag;	public function __construct()	{		$this->title_list=array();                          // strings with titles for first row 		$this->row_list=array();                          // data to show on cells		$this->fonts=array("#EEEEEE","#CCEEEE");      // background colors for odd and even rows		$this->table_tag="";                            // extra html code for table tag	}	public function set_table_tag($table_tag)                       // add some html code for the tag table	{		$this->table_tag=$table_tag;	}	public function background($fonts) 	{		if (is_array($fonts)) 		{			$this->fonts=$fonts; 		}		else		{ 			$this->fonts=array($fonts,$fonts);		}	}	public function addrow($row_data) 	{		$this->row_list[]=$row_data;	}	public function hash_output($data)	{		$this->title_list=array("field", "value");		foreach($data as $key=> $value)		{			$row_data = array();			$field_data = new row_field_node($key, "", "", "");			array_push($row_data, $field_data);			$field_data = new row_field_node($value, "", "", "");			array_push($row_data, $field_data);			$this->addrow($row_data);		}		return $this->html();	}	public function set_output($title, $data, $desc = '')	{		$this->title_list = $title;		$this->row_list = $data;		echo "total:".count($data).' '.$desc . "
"; return $this->html(); } public function html() { $cfondos=$this->fonts; //output title $output_content=""; $t_count=count($this->title_list); for($t_idx = 0; $t_idx < $t_count; $t_idx++) { $output_content.=sprintf("%s",$this->title_list[$t_idx]); } $output_content.=""; //start outputing data rows $table_row_content=""; $row_count=count($this->row_list); for($row_idx = 0; $row_idx < $row_count; $row_idx++) { $table_row_content .= sprintf("", $this->fonts[$row_idx % 2]); $line_data_list = $this->row_list[$row_idx]; $col_count = count($line_data_list); if($col_count != $t_count) { echo "row field count not match title count|col:".$col_count."|title:".$t_count; exit; } for($col_idx = 0; $col_idx < $col_count; $col_idx++) { Global $domain_name; if($line_data_list[$col_idx]->action != "") { //echo $line_data_list[$col_idx]->action."----".$line_data_list[$col_idx]->param."----".$line_data_list[$col_idx]->target."----".$line_data_list[$col_idx]->data."==============="; $table_row_content.=sprintf(" %s ", $line_data_list[$col_idx]->action, $line_data_list[$col_idx]->param, $line_data_list[$col_idx]->target, $line_data_list[$col_idx]->data); } else { $table_row_content.=sprintf(" %s ", $line_data_list[$col_idx]->data); } } $table_row_content.=""; } return sprintf("%s%s
",$this->table_tag,$output_content,$table_row_content); } public function csv_output($title, $data) { $this->title_list = $title; $this->row_list = $data; echo "total:".count($data)."
"; return $this->csv(); } public function csv() { $file_name = time(0).".rar"; $fp = fopen($file_name, 'w'); $t_count=count($this->title_list); //start outputing data rows $row_count=count($this->row_list); $file_data = ""; $csv_row_data = ""; for($t_idx = 0; $t_idx < $t_count; $t_idx++) { $csv_row_data = $csv_row_data." ".$this->title_list[$t_idx]; } $file_data = $file_data.$csv_row_data."\n"; for($row_idx = 0; $row_idx < $row_count; $row_idx++) { $line_data_list = $this->row_list[$row_idx]; $col_count = count($line_data_list); if($col_count != $t_count) { echo "row field count not match title count|col:".$col_count."|title:".$t_count; exit; } $csv_row_data = ""; for($col_idx = 0; $col_idx < $col_count; $col_idx++) { Global $domain_name; $csv_row_data = $csv_row_data." ".$line_data_list[$col_idx]->data; } $file_data = $file_data.$csv_row_data."\n"; } fwrite($fp, $file_data); Global $domain_name; echo "
csvfile:$file_name"; }}?>

人气教程排行