首页 > 编程 > PHP > 正文

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

2020-03-22 17:28:22
字体:
来源:转载
供稿:网友
  • 应用场景:游戏中的很多业务已经迁移到了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文件,具体实现见代码:

    <?phpheader("Content-type: text/html; charset=utf-8");$domain_name = "192.168.1.1";class row_field_node{	public $data;	public $action;	public $param;	public $target;	public function __construct($data, $action, $param, $target)	{		$this->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 . "<br>";		return $this->html();	}	public function html()	{		$cfondos=$this->fonts;		//output title		$output_content="<tr>";		$t_count=count($this->title_list);		for($t_idx = 0; $t_idx < $t_count; $t_idx++)		{			$output_content.=sprintf("<th>%s</th>",$this->title_list[$t_idx]);		}		$output_content.="</tr>";		//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("<tr style='background-color:%s'>", $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("<td align="center"><a href="http://$domain_name/%s?%s" target='%s'>%s</a></td>",						$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("<td align="center"> %s</a>        </td>", $line_data_list[$col_idx]->data);				}			}			$table_row_content.="</tr>";		}		return sprintf("<table cellpadding='0' cellspacing='0' border='1' %s>%s%s</table>",$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)."<br>";		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."";				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."";		}		fwrite($fp, $file_data);		Global $domain_name;		echo "<br><a href='http://$domain_name/cupteam_info/$file_name' target='detail'>csvfile:$file_name</a>";	}}?>


    示例:

        $real_server_list = array();    foreach($server_list as $server_key)    {        $temp_array = explode(":", $server_key);        $filed_node = new row_field_node();        $filed_node->data = $temp_array[1];        $filed_node->action = "cupteam/get_guild_list_output.php";        $filed_node->param = "input_id=".$filed_node->data;        $filed_node->target = "detail";        $row_data = array($filed_node);        array_push($real_server_list, $row_data);    }    $t1=new xtable();    echo $t1->set_output(array("server_id"), $real_server_list);

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表