PHP数据跨行跨列处理

article/2025/11/11 16:05:23

PS

PHP数据跨行跨列处理,表格展示,Excel导出。后台是Dcat Admin,导出是"maatwebsite/excel": “^3.1”

Excel效果

在这里插入图片描述

后台页面效果

在这里插入图片描述

示例代码

数据调用

可以放在Dcat对应Controller的数据仓库里面。

    public function get(Grid\Model $model){// 返回Controller数据return $this->getdataInit();//        return parent::get($model); // TODO: Change the autogenerated stub}// 调用方法public function getdataInit(){// 数据查询$dataModel = $this->getData();if(!count($dataModel)) return [];// 数据格式化try {// 这是有3列汇总的情况// 如果只有2列汇总,传参column4注释// 如果只有1列汇总,传参column4、column3注释// 对应的字段得到控制属性,默认是等于true显示的,等于false表示不显示// $dataRowCol->isColumn4 = false; $dataRowCol->isColumn3 = false;$dataRowCol = new dataRowCol(['column1'   => 'pay_policy_time',  // 投保日期列 key'column2'   => 'channel_1',			// 一级渠道 key'column3'   => 'channel_2',			// 二级渠道 key'column4'   => 'channel_3',			// 三级渠道 key],$this);// 模拟数据写入
//            $this->dbTestData(300);$data1 = $dataRowCol->dataInit($dataModel);}catch (\Exception $e){echo $e->getTraceAsString();exit();}return $data1;}/*** 数据统一计算* 返回版* Created by PhpStorm* User: Noah* Date: 2022/12/19* Time: 17:50* @param $re* @param $v* @return mixed*/public function reNumBc($re,$v,$isKey = 'id'){if(!isset($re[$isKey])){return $v;}// 计数器,累加了几次$re['order_num'] += $v['order_num'];$re['unpaid_pay'] += $v['unpaid_pay'];$re['sign_num'] += $v['sign_num'];$re['premium'] = bcadd($re['premium'],$v['premium'],ConfigService::bc_float);$re['piece_avg'] = bcadd($re['piece_avg'],$v['piece_avg'],ConfigService::bc_float);$re['re_piece'] += $v['re_piece'];$re['re_premium'] = bcadd($re['re_premium'],$v['re_premium'],ConfigService::bc_float);$re['add_premium'] = bcadd($re['add_premium'],$v['add_premium'],ConfigService::bc_float);return $re;}
数据格式化类
<?php
/**** Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 11:01*/namespace App\Admin\Server;class dataRowCol
{/*** 四级栏目是否显示* 不显示的情况需要把数据组合到3级栏目* 且上级栏目跨行数也需要更改* @var bool*/public $isColumn3 = true;public $isColumn4 = true;protected $summaryField1 = 'column1';protected $summaryField2 = 'column2';protected $summaryField3 = 'column3';protected $summaryField4 = 'column4';protected $summaryField5 = 'column5';/*** @var string[]*'column1'   => 'pay_policy_time',   // 一级栏目字段'column2'   => 'channel_1',         // 二级栏目字段'column3'   => 'channel_2',         // 三级栏目字段'column4'   => 'channel_3',         // 四级栏目字段***/protected $columnArr  = [];/*** 明细数据累加方法* @var*/protected  $ob;protected $channel;public function __construct($columnArr, $ob){if(!isset($columnArr[$this->summaryField4])) $columnArr[$this->summaryField4] = $this->summaryField4;if(!isset($columnArr[$this->summaryField3])) $columnArr[$this->summaryField3] = $this->summaryField3;$this->columnArr = $columnArr;$this->ob = $ob;}/*** 调用外部方法计算累加* $re 累加并返回的数据* $v 计算的数据* $isKey = 'id' 判断否是为空的字段,字段不存在直接$v* Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 11:09* @param $sum* @param $v* @return mixed*/private function reNumBc($sum,$v,$isKey = 'id'){return $this->ob->reNumBc($sum,$v,$isKey);}/*** 数据格式化* Created by PhpStorm* User: Noah* Date: 2022/12/16* Time: 11:25* @param $data'*/public function dataInit($data){$res = [];$sum = []; // 总汇-总合计$huizongs = []; // 总汇-数据格式化$dayDataInit = [];    //  每日合计-数据格式化$daySum = [];if(count($data)){foreach ($data as $v){// 总汇-总合计$sum = $this->reNumBc($sum,$v);$this->channelInit($this->channel,$v);$key = date('Y-m-d',strtotime($v[$this->columnArr[$this->summaryField1]]));// 每日合计-数据格式化list($dayDataInit,$daySum) = $this->dayChannelInit($dayDataInit,$daySum,$v,$key);}}
//        dd($this->channel);
//        dd([
//            $dayDataInit,
//            $daySum
//        ]);// 总汇总-数据组合// 总合计$res[0] = $sum;$this->resFirst($res[0]);// 总汇总-数组组合$this->sumDataInit($this->channel,$res,0);// 每日汇总-数组组合$this->sumDayDataInit($dayDataInit,$daySum,$res);return $res;}/*** 首行合计* Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 0:37* @param $sum* @param string $value*/private function resFirst(&$sum,$value = '汇总(截止到昨日)'){$sum[$this->summaryField1] = ['value' => $value,];if($this->isColumn4){$colspan = 3;}else{$colspan = 2;}$sum[$this->summaryField2] = ['value' => '汇总','colspan'   => $colspan];unset($sum[$this->summaryField3]);unset($sum[$this->summaryField4]);}/*** 每天-数组组合* Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 1:00* @param $dayDataInit* @param $daySum* @param $res*/private function sumDayDataInit($dayDataInit,$daySum,&$res){foreach ($dayDataInit as $k => $v){
//            dd($daySum);$res[] = $daySum[$k];$resKey = count($res)?count($res)-1:0;$this->resFirst($res[$resKey],$k);$this->sumDataInit($v,$res,$resKey);}}/*** 总汇总-数组组合* Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 0:29* @param $res* @param int $type*/private function sumDataInit($data,&$res,$resKey){$inarray = ['data','num',$this->summaryField2,$this->summaryField3];$sumNum = 1;if($this->isColumn3) $sumNum += count($data[$this->summaryField2]);unset($data[$this->summaryField2]);
//        unset($data[$this->summaryField3]); login_timeforeach ($data as $k1 => $v1){// 二级栏目if($this->isColumn3){$res[] = $this->column1Init($k1,$v1);if($this->isColumn4) $sumNum += count($v1[$this->summaryField2]);}if(!in_array($k1,$inarray)){foreach ($v1 as $k2 => $v2){$this->v2Init($res,$sumNum,$k2,$v2);}}}// 一级栏目跨行=二级栏目数量(去重)+三级栏目数量(对应二级栏目下去重)+归属一级栏目的行数$res[$resKey][$this->summaryField1]['rowspan'] = $sumNum;}/*** v2数据格式化* Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 14:24* @param $res* @param $sumNum* @param $k2* @param $v2*/private function v2Init(&$res,&$sumNum,$k2,$v2){$inarray = ['data','num',$this->summaryField2,$this->summaryField3];if(!$this->isColumn3) $inarray = ['data','num',$this->summaryField2];if(!in_array($k2,$inarray)){if($this->isColumn4){// 四级栏目显示$column2 = $this->column2Init($k2,$v2);$res[] = $column2;}foreach ($v2 as $k3 => $v3){$this->v3Init($res,$sumNum,$k3,$v3);}}}/*** v3数据处理* Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 14:21* @param $res* @param $sumNum* @param $k3* @param $v3* @param $k3inarray*/private function v3Init(&$res,&$sumNum,$k3,$v3){$k3inarray = ['data','num',$this->summaryField2,$this->summaryField3];if(!in_array($k3,$k3inarray)){$sumNum += count($v3['data']);foreach ($v3['data'] as $k4 => $v4){if($this->isColumn4){// 四级栏目显示$v4[$this->summaryField4] = $v4[$this->columnArr[$this->summaryField4]];unset($v4[$this->columnArr[$this->summaryField1]]);unset($v4[$this->columnArr[$this->summaryField2]]);unset($v4[$this->columnArr[$this->summaryField3]]);}else{if($this->isColumn3){// 四级栏目隐藏$v4[$this->summaryField3] = $v4[$this->columnArr[$this->summaryField3]];unset($v4[$this->columnArr[$this->summaryField1]]);unset($v4[$this->columnArr[$this->summaryField2]]);}else{// 三级栏目隐藏$v4[$this->summaryField2] = $v4[$this->columnArr[$this->summaryField2]];unset($v4[$this->columnArr[$this->summaryField1]]);
//                        unset($v4[$this->columnArr[$this->summaryField2]]);}}// 详细数据$res[] = $v4;}}}/*** 一级栏目数据组合* Created by PhpStorm* User: Noah* Date: 2022/12/19* Time: 22:49* @param $k1* @param $v1* @return mixed*/private function column1Init($k1,$v1){if($this->isColumn4){$colspan = 2;$rowspan = count($v1[$this->summaryField2])+$v1['num'];}else{$colspan = 1;$rowspan = $v1['num'];}$column1 = $v1['data'];$column1[$this->summaryField1] = ['value' => $k1,'rowspan'   => $rowspan+1];$column1[$this->summaryField2] = ['value' => '汇总','colspan'   => $colspan];unset($column1[$this->summaryField3]);unset($column1[$this->summaryField4]);return $column1;}/*** 二级栏目数据组合* Created by PhpStorm* User: Noah* Date: 2022/12/19* Time: 22:49* @param $k1* @param $v1* @return mixed*/private function column2Init($k2,$v2){$column2 = $v2['data'];$column2[$this->summaryField2] = ['value' => $k2,'rowspan'   => $v2['num']+1,];$column2[$this->summaryField3] = ['value' => '汇总','colspan'   => 1];unset($column2[$this->summaryField1]);unset($column2[$this->summaryField4]);return $column2;}/*** 合计汇总* Created by PhpStorm* User: Noah* Date: 2022/12/16* Time: 13:41* @param $sum* @param $v* @return mixed*/private function zongSum(&$sum,$v){if(count($sum)){$this->numBc($sum,$v);}else{$sum = $v;}return $sum;}/*** 每天渠道数据存储* Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 0:35* @param $dayDataInit* @param $daySum* @param $v* @param $key* @return array*/private function dayChannelInit($dayDataInit,$daySum,$v,$key){if(!isset($dayDataInit[$key])) $dayDataInit[$key] = [];$this->channelInit($dayDataInit[$key],$v);if(!isset($daySum[$key])) $daySum[$key] = [];$daySum[$key] = $this->reNumBc($daySum[$key],$v);return [$dayDataInit,$daySum];}/*** 渠道数据存储* Created by PhpStorm* User: Noah* Date: 2022/12/19* Time: 20:22* @param $data*/private function channelInit(&$dbData,$data){$channel = $dbData;// 获取key$channel1Key = isset($data[$this->columnArr[$this->summaryField2]])?$data[$this->columnArr[$this->summaryField2]]:$this->summaryField2;$channel2Key = isset($data[$this->columnArr[$this->summaryField3]])?$data[$this->columnArr[$this->summaryField3]]:$this->summaryField3;$channel3Key = isset($data[$this->columnArr[$this->summaryField4]])?$data[$this->columnArr[$this->summaryField4]]:$this->summaryField4;// 初始化$channel[$channel1Key] = isset($channel[$channel1Key])?$channel[$channel1Key]:[];$channel[$channel1Key][$channel2Key] = isset($channel[$channel1Key][$channel2Key])?$channel[$channel1Key][$channel2Key]:[];$channel[$channel1Key][$channel2Key][$channel3Key] = isset($channel[$channel1Key][$channel2Key][$channel3Key])?$channel[$channel1Key][$channel2Key][$channel3Key]:[];$channel1Data = $channel[$channel1Key];$channel2Data = $channel[$channel1Key][$channel2Key];$channel3Data = $channel[$channel1Key][$channel2Key][$channel3Key];// 数据if(!isset($channel1Data['data'])) $channel1Data['data'] = [];if(!isset($channel2Data['data'])) $channel2Data['data'] = [];if(!isset($channel3Data['data'])) $channel3Data['data'] = [];if(!isset($channel3Data['sumdata'])) $channel3Data['sumdata'] = [];$channel1Data['data'] = $this->reNumBc($channel1Data['data'],$data);$channel2Data['data'] = $this->reNumBc($channel2Data['data'],$data);$channel3Data['data'][] = $data;$channel3Data['sumdata'] = $this->reNumBc($channel3Data['sumdata'],$data);// 值操作$channel1Data['num'] = isset($channel1Data['num'])?$channel1Data['num']+1:1;$channel2Data['num'] = isset($channel2Data['num'])?$channel2Data['num']+1:1;$channel3Data['num'] = isset($channel3Data['num'])?$channel3Data['num']+1:1;//        // 二级级栏目不重复key$channel1Data[$this->summaryField2][$channel2Key] = 1;
//        // 二级级栏目不重复key$channel2Data[$this->summaryField3][$channel3Key] = 1;// 一级栏目不重复key$channel[$this->summaryField2][$channel1Key] = 1;
//        $channel[$this->summaryField2][$channel1Key][$channel2Key] = 1;
//        $channel[$this->summaryField3][$channel2Key] = 1;
//        // 栏目二不重复key
//        $channel[$this->summaryField3][$channel2Key] = 1;// 赋值$channel[$channel1Key] = $channel1Data;$channel[$channel1Key][$channel2Key] = $channel2Data;$channel[$channel1Key][$channel2Key][$channel3Key] = $channel3Data;$dbData = $channel;}
}
Dcat Admin Grid
            $grid->column('column1','投保日期')->view('admin.column1');$grid->column('column2','活动一级渠道')->view('admin.column2');$grid->column('column3','活动二级渠道')->view('admin.column3');$grid->column('column4','活动三级渠道')->view('admin.column4');$grid->disablePagination();
Dcat Admin View

链接:https://pan.baidu.com/s/1fel4RgzJtdvBIk6CfmSRvA
提取码:nw6l

Excel导出调用
        // 02
$excel = new BwPosition();
Excel::store($excel,'02-table-'.date('Y-m-d',strtotime('-1 day')).'.xlsx');
Excel导出示例
<?php
/**** Created by PhpStorm* User: Noah* Date: 2022/12/20* Time: 19:37*/namespace App\Admin\Server\Excel;use App\Admin\Repositories\BwChannel_canalDb;
use App\Api\Service\ConfigService;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;/*** 02*/
class BwPosition extends ExcelServer
{public function __construct(){parent::__construct();}/***  业务代码* @return array|string[][]*/public function createData(){$start = date('Y-m-d 00:00:00',strtotime("-1 day"));$end = date('Y-m-d 23:59:59',strtotime("-1 day"));$login_time = ['start' => $start,'end'=> $end];request()->request->set('login_time',$login_time);$BwChannel_canalDb = new \App\Admin\Repositories\BwPosition();$data = $BwChannel_canalDb->getdataInit();$headTitle = ['投保日期','活动一级渠道','活动二级渠道','活动三级渠道','产品名称','订单数','未支付订单数','签单件数','签单保费','件均','退保件数','退保保费','净增保费',];$bodyData = [];
//        dd($data);// 数据循环foreach ($data as $k => $item) {list($column1,$column1Me) = $this->getValueArr($item,'column1');list($column2,$column2Me) = $this->getValueArr($item,'column2');list($column3,$column3Me) = $this->getValueArr($item,'column3');$column4 = $this->getStrValue($item,'column4');$column1Show = $column1;$column2Show = $column2;$column3Show = $column3;$column4Show = $column4;if($k == 0){// 一级栏目第一行换行$login_time = $column1;$this->mergeCells['A2'] = 'A'.($column1Me+1);$this->mergeCells['B2'] = 'D2';
//                echo $column1Me.'<br/>';}/*** 判断如果是一级渠道得移动到一级渠道* 和后端用同一个数据源*/if(in_array($column1,ConfigService::arr_channel_1)){// 二级栏目单元格合并$start2key = count($bodyData)+1+1;$this->mergeCells['B'.$start2key] = 'B'.($start2key+$column1Me-1);$this->mergeCells['C'.$start2key] = 'D'.$start2key;$column3Show = $column2;$column2Show = $column1;} else if (strtotime($column1)){// 一级栏目单元格合并$start_key = count($bodyData)+1+1;$this->mergeCells['A'.$start_key] = 'A'.($start_key+$column1Me-1);$this->mergeCells['B'.$start_key] = 'D'.$start_key;}/*** 三级栏目*/if(in_array($column2,ConfigService::arr_channel_2)){// 三级栏目单元格合并$start3key = count($bodyData)+1+1;$this->mergeCells['C'.$start3key] = 'C'.($start3key+$column2Me-1);
//                echo $start3key.'|'.$column2Me.'<br/>';$column4Show = $column3;$column3Show = $column2;}$arr[0] = $column1Show;$arr[1] = $column2Show;$arr[2] = $column3Show;$arr[3] = $column4Show;$arr[4] = $this->getStrValue($item,'name');$arr[5] = $this->getValue($item,'order_num');$arr[6] = $this->getValue($item,'unpaid_pay');$arr[7] = $this->getValue($item,'sign_num');$arr[8] = $this->getValue($item,'premium');$arr[9] = $this->getValue($item,'piece_avg');$arr[10] = $this->getValue($item,'re_piece');$arr[11] = $this->getValue($item,'re_premium');$arr[12] = $this->getValue($item,'add_premium');$bodyData[] = $arr;}$this->dataCount = count($bodyData)+1;
//        dd($bodyData);// 单元格背景颜色$this->bgColor = ['A1'    => 'M1',];$this->last = 'M';// 清除掉 $arrunset($arr);return [$headTitle, $bodyData];}public function setColumnDimension(Worksheet $sheet){$sheet->getColumnDimension('A')->setWidth(20);$sheet->getColumnDimension('B')->setWidth(20);$sheet->getColumnDimension('C')->setWidth(20);$sheet->getColumnDimension('D')->setWidth(18);$sheet->getColumnDimension('E')->setWidth(18);$sheet->getColumnDimension('F')->setWidth(15);$sheet->getColumnDimension('G')->setWidth(15);$sheet->getColumnDimension('H')->setWidth(15);$sheet->getColumnDimension('I')->setWidth(15);$sheet->getColumnDimension('J')->setWidth(15);$sheet->getColumnDimension('K')->setWidth(15);$sheet->getColumnDimension('L')->setWidth(15);$sheet->getColumnDimension('M')->setWidth(15);}
}

http://chatgpt.dhexx.cn/article/L1wfnoIL.shtml

相关文章

【干货】html表格的跨行合并与跨列合并

在HTML中经常会用到表格&#xff0c;但由于我们想要的表格总是需要不规则的。而表格的合并常常会经常用到&#xff0c;今天我们来看一下表格的合并。 首先我们要了解一下合并的步骤 先确认是跨行合并还是跨列合并根据单元格先上后下&#xff0c;先左后右来进行合并如果要合并…

HTML跨行跨列

colspan 属性规定单元格可横跨的列数<table border"1"><tr><th>姓名</th><th>性别</th></tr><tr><td colspan"2">籍贯</td></tr> </table> 效果图 rowspan 属性规定单元格可横跨…

表格的跨行与跨列

表格的跨行与跨列&#xff08;课表示例&#xff09; colspan 属性&#xff1a;用来规定表格单元格可横跨的列数。rowspan 属性&#xff1a;用来规定表格单元格可横跨的行数。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-…

【HTML】HTML 表格 ③ ( 合并单元格 | 跨行合并 | 跨列合并 | 单元格合并顺序 | 跨行设置 rowspan 属性 | 跨列设置 colspan 属性 )

文章目录 一、合并单元格1、合并单元格方式2、合并单元格顺序3、合并单元格流程 二、合并单元格示例1、原始表格2、跨行合并单元格3、跨列合并单元格 一、合并单元格 1、合并单元格方式 单元格合并方式 : 跨行合并 : 垂直方向上的 上下 单元格合并 是 跨行合并 , 在 <td>…

element+vue实现表格跨行

在项目开发中表格的使用还是很频繁的&#xff0c;而其中难免会涉及到表格的跨行跨列行为。这是一次记使用element-ui的table组件加vue实现的表格跨行跨列实践。 首先是查看element的table组件的api&#xff1a; <template><div><el-table:data"tableData6&…

【Excel】跨行排序

今天分享Excel的小技巧&#xff1a;如何进行跨行排序。 原数据如下&#xff1a; 序号房产面积3号101室87.573号101室小计3号105室77.213号105室小计3号204室90.763号204室小计3号205室77.473号205室小计3号206室98.253号206室小计...... 用Excel进行排序&#xff0c;但不包含小…

HTML 表格跨行与跨列

<table border"1px" width"300px" cellspacing"0" cellpadding"0" bgcolor"red" ><!--border 边框 参数都打引号 cellspacing单元格间距--><tr><td align"left">姓名</td><td…

【HTML】表格的跨行跨列

表格的跨行跨列 第一行第一列的单元格要跨两列&#xff0c;利用colspan属性来实现跨列 <table align"center" border"1" width"200" height"200" cellspacing"0"><tr><th colspan"2">1.1</…

table同时实现跨行跨列

table同时实现跨行跨列的效果&#xff1a; HTML代码如下&#xff1a; <div id"app"><table cellpadding"0" cellspacing"0" class"ptable detail_new_dialg_table"><tr class"dialg_table_th"><th …

03_HTML表格的跨列跨行(colspan属性设置跨列、rowspan属性设置换行)

目录 1.colspan属性&#xff08;跨列&#xff09;2.rowspan属性&#xff08;跨行&#xff09;3.综合练习 1.colspan属性&#xff08;跨列&#xff09; 示例 <table width"500" height"500" cellspacing"0" border"1"><tr>…

HTML 表格跨行跨列

HTML和CSS第一天 8.8跨行跨列表格&#xff08;次重点&#xff0c;必须掌握&#xff09;<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>9-表格的跨行跨列</title> </head> <body> &…

HTML表格跨行、跨列操作(rowspan、colspan)

一般使用<td>元素的colspan属性来实现单元格跨列操作&#xff0c;使用<td>元素的rowspan属性来实现单元格的跨行操作。 colspan属性规定单元格可横跨的列数&#xff0c;所有浏览器都支持colspan属性。其取值为number&#xff0c;如下图所示&#xff1a; 例如&#…

跨行转账汇款处理流程

一.跨行转账汇款业务介绍 有了大小额系统和超级网银&#xff0c;银行的跨行业务就有意思了。银行对不同的客群和不同的场景&#xff0c;做了不同的渠道。我们最经常接触的大概就是银行柜台、手机网银、POS机和ATM机。出于各种商业目的&#xff0c;不同渠道的业务采用不同的清算…

cmake+gtest

项目中想用google test&#xff0c;项目也是用cmake管理的。 于是想用cmake 添加gtest set(CMAKE_PREFIX_PATH"/path/to/gtest/install/path/cmake/path"${CMAKE_PREFIX_PATH})enable_testing()set(GTEST_ROOT "/path/to/gtest/install/path")find_packag…

熟悉使用gtest

文章目录 1&#xff1a;介绍1.1、什么是gtest1.2、断言 2、gtest的简单使用3、gtest系列之事件机制4、gtest系列之死亡测试 1&#xff1a;介绍 1.1、什么是gtest gtest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C单元测试框架&#xff0c;由…

gtest测试

环境安装 1、下载gtest1.8版本 wget https://github.com/google/googletest/archive/refs/tags/release-1.8.1.zip 2、将其解压在“.../gtest/”目录下&#xff0c;解压命令&#xff1a; unzip release-1.8.1.zip 3、配置 解压后产生文件googletest-release-1.8.1&#x…

GTest 总结

Google C单元测试框架&#xff08;简称Gtest&#xff09;&#xff0c;可在多个平台上使用&#xff08;包括Linux, Mac OS X, Windows, Cygwin和Symbian&#xff09;&#xff0c;它提供了丰富的断言、致命和非致命失败判断&#xff0c;能进行值参数化测试、类型参数化测试、“死…

GTest

参考链接: https://blog.csdn.net/linhai1028/article/details/81675724 https://www.cnblogs.com/helloworldcode/p/9606838.html 一.gtest简介 是Google的一套用于编写C测试的框架&#xff0c;可以运行在很多平台上&#xff08;包括Linux、Mac OS X、Windows、Cygwin等等&am…

GTest从入门到入门

GTest从入门到入门 1 GTest简介 GTest是Google的开源库&#xff0c;是一个功能强大的跨平台C测试功能库。对于非测试工程师的开发人员来说&#xff0c;学习GTest有利于进行代码的单元测试。 GTest的功能不止于单元测试&#xff0c;事实上&#xff0c;GTest可以适用于各种测试…

gtest--单元测试

文章目录 gtest单元测试1.gtest的优点2.搭建测试框架 gtest单元测试 gtest是Google的一套用于编写C测试的框架&#xff0c;可以运行在很多平台上&#xff08;包括Linux、Mac OS X、Windows、Cygwin等等&#xff09;。基于xUnit架构。支持很多好用的特性&#xff0c;包括自动识别…