PHP使用PhpSpreadsheet实现导出Excel时带下拉框列表 (可支持三级联动)
因项目需要导出Excel表 需要支持下拉 且 还需要支持三级联动功能
目前应为PHPExcel 不在维护,固采用 PhpSpreadsheet
效果如图:
第一步:首先 使用composer 获取PhpSpreadsheet
我这里PHP 版本 7.4 命令如下:
composer require phpoffice/phpspreadsheet
第二步:新建php 文件 代码如下 可根据实际情况 自己改动:
<?phprequire './vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\NamedRange;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;// 定义表头
$header = [['col' => 'A', 'title' => '姓名', 'field' => 'name', 'width' => 20, 'id_down_type' => 0, 'is_text' => 1],['col' => 'B', 'title' => '证件号', 'field' => 'id_card', 'width' => 30, 'id_down_type' => 0, 'is_text' => 1],['col' => 'C', 'title' => '性别', 'field' => 'gender', 'width' => 20, 'id_down_type' => 1, 'is_text' => 1, 'count' => 2, 'sub_table_name' => 'sex'],['col' => 'D', 'title' => '联系方式', 'field' => 'phone', 'width' => 20, 'id_down_type' => 0, 'is_text' => 1],['col' => 'E', 'title' => '门店', 'field' => 'mendiao', 'width' => 30, 'id_down_type' => 2, 'is_text' => 0],['col' => 'F', 'title' => '公寓', 'field' => 'gongyu', 'width' => 30, 'id_down_type' => 2, 'is_text' => 0],['col' => 'G', 'title' => '门牌号', 'field' => 'menpai', 'width' => 30, 'id_down_type' => 2, 'is_text' => 0],
];// 下拉数据[这里模拟出来数据格式,实际情况从数据库获取数据并整理成下列数据格式]
$oneData = [['id' => 1,'title' => '我是A','text'=>'我是A_1','children' =>[['id' => 2,'title' => '我是A的下级A1','text'=>'我是A的下级A1_2','children' =>[['id' => 3,'title' => '我是A1的下级A11','text'=>'我是A1的下级A11_3',],['id' => 4,'title' => '我是A1的下级A12','text'=>'我是A1的下级A12_4',]]],['id' => 5,'title' => '我是A的下级A2','text'=>'我是A的下级A2_5','children' =>[['id' => 6,'title' => '我是A2的下级A21','text'=>'我是A2的下级A21_6',],['id' => 7,'title' => '我是A2的下级A22','text'=>'我是A2的下级A22_7',]]]]],['id' => 8,'title' => '我是B','text'=>'我是B_8','children' =>[['id' => 9,'title' => '我是B的下级B1','text'=>'我是B的下级B1_9','children' =>[['id' => 10,'title' => '我是B1的下级B11','text'=>'我是B1的下级B11_10',],['id' => 11,'title' => '我是B1的下级B12','text'=>'我是B1的下级B12_11',]]],['id' => 12,'title' => '我是B的下级B2','text' => '我是B的下级B2_12','children' =>[['id' => 13,'title' => '我是B2的下级B21','text' => '我是B2的下级B21_13',],['id' => 14,'title' => '我是B2的下级B22','text' => '我是B2的下级B22_14']]]]],
];//实例化Spreadsheet对象
$spreadsheet = new Spreadsheet();$sex_list = [['id' => 1, 'text' => '男'],['id' => 2, 'text' => '女'],];
$sub_table_num = 1; //子表顺序 默认1
//创建子表下拉定义 用于下拉
$sub_table_info_arr = [['title' => 'sex', 'index' => $sub_table_num, 'data' => $sex_list],
];
$sub_table_num++;//创建下拉分表数据
create_excel_sub_table($spreadsheet, $sub_table_info_arr);//创建下拉联动分表数据
$liandong_name = 'region'; // 这里的region为分表名称
create_excel_drop_down($spreadsheet, $sub_table_num, $liandong_name, $oneData); //无限极oneData 里面结构为[['text'=>'部门1_00001','children'=>[['text'=>'部门1子集1_00001']]]// 初始化表头
$spreadsheet->setActiveSheetIndex(0);
$spreadsheet->getActiveSheet()->setTitle('导入模板');foreach ($header as $key => $value) {//$spreadsheet->getActiveSheet()->setCellValueByColumnAndRow($key, 1, $value['title']);$spreadsheet->setActiveSheetIndex(0)->setCellValue($value['col'] . "1", $value['title']);$spreadsheet->getActiveSheet()->getStyle($value['col'] . "1", $value['title'])->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED); //设置红色文字// 设置每列宽度$spreadsheet->getActiveSheet()->getColumnDimension($value['col'])->setWidth($value['width']);//设置单元格格式为文本if ($value['is_text'] == 1) {$spreadsheet->getActiveSheet()->getStyle($value['col'])->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_TEXT);}
}
$objActSheet = $spreadsheet->getActiveSheet();// 输出下拉菜单
for ($i = 2; $i < 2000; $i++) {foreach ($header as $key1 => $value1) {//$this->set_select_cell($objActSheet,'A','id_type',$key,$i);if ($value1['id_down_type'] == 1) {//单纯下拉set_select_cell($objActSheet, $value1['col'], $value1['sub_table_name'], $value1['count'], $value1['title'], $i);} elseif ($value1['id_down_type'] == 2) {//联动下拉if ($value1['col'] == 'A' || $value1['col'] == 'E' || $value1['col'] == 'AC') {switch ($value1['col']) {case 'E':$fit_col = ['F','G'];break;case 'AC'://这里为关联 如AC 列 关联AD AE 这个$fit_col = ['AD', 'AE'];break;}$mian_col = $value1['col'];//处理联动下拉set_drop_down_select_cell($objActSheet, $mian_col, $fit_col, $value1['title'], $i,$liandong_name);}}}
}
$path = "./";
$subject = "导出模板".date('YmdHis');
$ext = ".xlsx"; //后缀
$export = $path . $subject . $ext;
$writer = new Xlsx($spreadsheet);
//保存文件
$writer->save($export);
//关闭连接,销毁变量
$spreadsheet->disconnectWorksheets();unset($spreadsheet);
var_dump($export);
die;/*** 创建Excel 分表* @param obpe Excel 对象* @param sub_table_info_arr 需要需要创建的分表二维数组 key title_name 分表表名标题 key index 分表顺序 key data 数据源 且数据源必须为 id text 键值对* @param write_data 写入的数据 二维 包含 id text 两个键值*/
function create_excel_sub_table($obpe, $sub_table_info_arr)
{if (!empty($sub_table_info_arr)) {foreach ($sub_table_info_arr as $key => $value) {$obpe->createSheet();$obpe->setActiveSheetIndex($value['index']); //设置序号$obpe->getActiveSheet()->setTitle($value['title']); //设置表名$obpe->getActiveSheet()->setSheetState(Worksheet::SHEETSTATE_HIDDEN); //隐藏//密码$obpe->getActiveSheet()->getProtection()->setPassword('PHPExcel');$obpe->getActiveSheet()->getProtection()->setSheet(true);// This should be enabled inorder to enable any of thefollowing!$obpe->getActiveSheet()->getProtection()->setSort(true);$obpe->getActiveSheet()->getProtection()->setInsertRows(true);$obpe->getActiveSheet()->getProtection()->setFormatCells(true);$key = 1;if (!empty($value['data'])) {foreach ($value['data'] as $k => $v) {$str = $v['text'] . '_' . $v['id'];$obpe->getActiveSheet()->setCellValue('A' . $key, $str);$key++;}}}}
}/*** 生成Excel 列* @param int $num 需要的列数* @return array*/function getExcelIndexRow($num=1){$r = [];$idx = ['idx' => 0];for ($i = 0; $i < $num; $i++) {$r[] = getNextIdx($idx);}unset($idx);return $r;
}function getNextIdx(&$idx) {// 先转换26进制$num26 = base_convert($idx['idx'], 10, 26);$result = '';// 对每一位进行字符转换for ($i = 0; $i < strlen(strval($num26)); $i++) {if ($i == 0 && strlen(strval($num26)) != 1) {if (is_numeric($num26[$i])) {$result.= chr(ord($num26[$i]) + 16);} else {$result.= chr(ord($num26[$i]) - 23);}} else {if (is_numeric($num26[$i])) {$result.= chr(ord($num26[$i]) + 17);} else {$result.= chr(ord($num26[$i]) - 22);}}}$idx['idx'] = $idx['idx'] + 1;return $result;
}/***生成Excel 联动下拉* @param obpe Excel对象句柄* @param sub_table_num 分表序号* @param table_name 分表名称* @param data_source 需要处理的数据源*/
function create_excel_drop_down($obpe, $sub_table_num, $table_name, $data_source)
{//***********************$obpe->createSheet();$obpe->setActiveSheetIndex($sub_table_num);$obpe->getActiveSheet()->setTitle($table_name);$obpe->getActiveSheet()->setSheetState(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_HIDDEN); //隐藏//密码$obpe->getActiveSheet()->getProtection()->setPassword('PHPExcel');$obpe->getActiveSheet()->getProtection()->setSheet(true);// This should be enabled inorder to enable any of thefollowing!$obpe->getActiveSheet()->getProtection()->setSort(true);$obpe->getActiveSheet()->getProtection()->setInsertRows(true);$obpe->getActiveSheet()->getProtection()->setFormatCells(true);$key = 1;//$col = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ', 'BA'];//这里定义1000个下拉 若超过 1000个下拉 异常输出$col = getExcelIndexRow(1000);$high = 0;//数据源格式必须按照以下格式规整 要不然数据处理出错/*$re = [['name'=>'湖北省','children'=>[['name'=>"武汉市",'children' =>['江夏区','洪山区','青山区','武昌区']],['name'=>"宜昌市",'children' =>['江夏区1','洪山区1','青山区1','武昌区1']],['name'=>"荆州市",'children' =>['江夏区2','洪山区2','青山区2','武昌区2']]]],['name'=>'湖南省','children'=>[['name'=>"长沙市",'children' =>['长沙市','长沙市1','长沙市3','长沙市6']],['name'=>"岳阳市",'children' =>['岳阳市4','岳阳市3','岳阳市2','岳阳市1']],[ 'name'=>"常德市",'children' =>['常德市1','常德市2','常德市3','常德市4']]]],];*/foreach ($data_source as $k => $v) {$str = $v['text'];$obpe->getActiveSheet()->setCellValue($col[0] . ($key + $high), $str);$max = 0; // 重置max$secondNum = count($v['children']);if (!empty($v['children'])) {foreach ($v['children'] as $index => $sendcond) {$obpe->getActiveSheet()->setCellValue($col[$index + 1] . ($key + $high), $sendcond['text']);//这里需要处理 若没有if (isset($sendcond['children']) && $sendcond['children']) {$thirdNum = count($sendcond['children']);} else {$thirdNum = 0;}if ($thirdNum > $max) {$max = $thirdNum;}if (!empty($sendcond['children'])) {foreach ($sendcond['children'] as $id => $third) {//$obpe->getActiveSheet()->setCellValue($col[$index+1].($key+$high+$id+1),$third);$obpe->getActiveSheet()->setCellValue($col[$index + 1] . ($key + $high + $id + 1), $third['text']);}//定义三级名称$obpe->addNamedRange(new NamedRange($sendcond['text'],$obpe->getSheetByName($table_name),$col[$index + 1] . ($key + $high + 1) . ':' . $col[$index + 1] . ($key + $high + 1 + $thirdNum - 1)));}}//定义二级$obpe->addNamedRange(new NamedRange($v['text'],$obpe->getSheetByName($table_name),$col[1] . ($key + $high) . ':' . $col[$secondNum] . ($key + $high)));}$high += $max;$key++;}//移花foreach ($data_source as $var => $cont) {$obpe->getSheetByName($table_name)->setCellValue('UI' . ($var + 1), $cont['text']);}$total = count($data_source);$n = 1;$obpe->addNamedRange(new NamedRange($table_name,$obpe->getSheetByName($table_name),"=\$UI\${$n}:\$UI\${$total}"));
}/***设置Excel 下拉 2020年8月4日16:02:09* @param objActSheet Excel对象句柄* @param col 操作的列* @param table_name Excel电子薄分表下拉名称*/
function set_select_cell($objActSheet, $col = '', $table_name, $key = '', $setPromptTitle, $i = '', $setErrorTitle = '输入的值有误', $setError = '您输入的值不在下拉列表内')
{$objValidation = $objActSheet->getCell("{$col}" . $i)->getDataValidation();$objValidation->setType(DataValidation::TYPE_LIST)// ->setErrorStyle(DataValidation::STYLE_INFORMATION)->setErrorStyle(DataValidation::STYLE_STOP)->setAllowBlank(true)->setShowInputMessage(true)->setShowErrorMessage(true)->setShowDropDown(true)->setErrorTitle('输入的值有误')->setError('您输入的值不在下拉列表内')->setPromptTitle("{$setPromptTitle}(在列表内选择)")->setPrompt('请从列表中选择一个值')->setFormula1($table_name . '!$A$1:$A$' . $key);
}/*** 设置联动下拉的Excel 渲染 2020年8月8日20:23:39* @param objActSheet Excel对象句柄* @param mian_col 联动下拉第一列* @param fit_col 数组 子下拉节点 setFormula1 依次为下拉第一列名 后续依次关联* @param setPromptTitle 中文字段映射名称*/
function set_drop_down_select_cell($objActSheet, $main_col, $fit_col, $setPromptTitle, $i,$main_table_name='region')
{$indirect_list_arr = $fit_col; //从主下拉节点开始计算array_unshift($indirect_list_arr, $main_col);//定义主表名//处理主下拉$objValidation = $objActSheet->getCell($main_col . $i)->getDataValidation();$objValidation->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST)->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP)->setAllowBlank(false)->setShowInputMessage(true)->setShowErrorMessage(true)->setShowDropDown(true)->setErrorTitle('输入的值有误')->setError('您输入的值不在下拉列表内')->setPromptTitle("{$setPromptTitle}(在列表内选择)")//->setPromptTitle("type_list(在列表内选择)")->setPrompt('请从列表中选择一个值')->setFormula1("={$main_table_name}");//处理分节点下拉if (!empty($fit_col)) {foreach ($fit_col as $key => $value) {$objValidation = $objActSheet->getCell($value . $i)->getDataValidation();$objValidation->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST)->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP)->setAllowBlank(false)->setShowInputMessage(true)->setShowErrorMessage(true)->setShowDropDown(true)->setErrorTitle('输入的值有误')->setError('您输入的值不在下拉列表内')->setPromptTitle('请选择')->setPrompt('请从列表中选择一个值')->setFormula1('=INDIRECT($' . $indirect_list_arr[$key] . $i . ')');}}return true;
}
步骤三: 运行php 我这里使用命令行
php index.php
查看即可
就是如此简单
相关文章:

PHP使用PhpSpreadsheet实现导出Excel时带下拉框列表 (可支持三级联动)
因项目需要导出Excel表 需要支持下拉 且 还需要支持三级联动功能 目前应为PHPExcel 不在维护,固采用 PhpSpreadsheet 效果如图: 第一步:首先 使用composer 获取PhpSpreadsheet 我这里PHP 版本 7.4 命令如下: composer r…...

Openssh高危漏洞CVE-2023-38408修复方案
0x01 漏洞简述 2023年07月21日,360CERT监测发现OpenSSH发布了OpenSSH的风险通告,漏洞编号为CVE-2023-38408,漏洞等级:高危,漏洞评分:8.1。 OpenSSH 是 Secure Shell (SSH) 协议的开源实现,提供…...
Android中的ContentProvider
Android中的ContentProvider 在Android中,ContentProvider是四大组件之一,用于在不同应用程序之间共享和管理数据。它提供了一种标准化的方式来访问和管理应用程序的数据,使得多个应用程序可以安全地共享数据,而无需直接访问彼此…...
if device is None and isinstance(net, torch.nn.Module):的含义?
这段代码的含义是,如果变量 device 为 None 并且 net 是 torch.nn.Module 的实例,那么执行后续的代码块。 解释一下其中的几个部分: device:这是一个代表设备的变量,通常用于指定在哪个设备上执行模型的计算ÿ…...

C++如何用OpenCV中实现图像的边缘检测和轮廓提取?
最近有个项目需要做细孔定位和孔距测量,需要做边缘检测和轮廓提取,先看初步效果图: 主要实现代码: int MainWindow::Test() {// 2.9 单个像素长度um 5倍double dbUnit 2.9/(1000*5);// 定义显示窗口namedWindow("src"…...

智慧水务和物联网智能水表在农村供水工程中的应用
摘 要:随着社会的进步和各项事业的飞速发展,人民生活水平的逐步提升,国家对农村饮水安全有了更高的要求,为了进一步提升农村供水服务的质量,利用现代化、信息化科学技术提升农村供水服务质量,提高用水管理效…...
机器学习笔记 - 了解 GitHub Copilot 如何通过提供自动完成式建议来帮助您编码
一、GitHub Copilot介绍 GitHub Copilot 是世界上第一个大规模 AI 开发人员工具,可以帮助您以更少的工作更快地编写代码。GitHub Copilot 从注释和代码中提取上下文,以立即建议单独的行和整个函数。 研究发现 GitHub Copilot 可以帮助开发人员更快地编码、专注于解决更大的问…...

《数据同步-NIFI系列》Nifi配置DBCPConnectionPool连接SQL Server数据库
Nifi配置DBCPConnectionPool连接SQL Server数据库 一、新增DBCPConnectionPool 在配置中新增DBCPConnectionPool,然后配置数据库相关信息 二、配置DBCPConnectionPool 2.1 DBCPConnectionPool介绍 主要介绍以下五个必填参数 Database Connection URL࿱…...

HarmonyOS/OpenHarmony元服务开发-卡片使用自定义绘制能力
ArkTS卡片开放了自定义绘制的能力,在卡片上可以通过Canvas组件创建一块画布,然后通过CanvasRenderingContext2D对象在画布上进行自定义图形的绘制,如下示例代码实现了在画布的中心绘制了一个笑脸。 Entry Component struct Card { private c…...

SpringBoot引入MyBatisGenerator
1.引入插件 <plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><configuration><!--generator配置文件所在位置--><configuratio…...

JVM面试题--实践
目录 JVM 调优的参数可以在哪里设置参数值 war包部署在tomcat中设置 jar包部署在启动参数设置 JVM 调优的参数都有哪些? 设置堆空间大小 虚拟机栈的设置 年轻代中Eden区和两个Survivor区的大小比例 年轻代晋升老年代阈值 设置垃圾回收收集器 JVM 调优的工…...

神经网络的搭建与各层分析
为什么去西藏的人都会感觉很治愈 拉萨的老中医是这么说的 缺氧脑子短路,很多事想不起来,就会感觉很幸福 一、卷积层 解释:卷积层通过卷积操作对输入数据进行处理。它使用一组可学习的滤波器(也称为卷积核或特征检测器)…...

SQL-每日一题【1174. 即时食物配送 II】
题目 配送表: Delivery 如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为「计划订单」。 「首次订单」是顾客最早创建的订单。我们保证一个顾客只会有一个「首次订单」。 写一条 SQL 查询语句获取即时订单在所有用户的首次订…...
MySQL学习记录:第一章 DQL语言
文章目录 第一章 查询语言,DQL语言一、基础查询1、查询表中单个字段2、查询表中多个字段3、查询表中所有字段4、查询常量值5、查询表达式6、查询函数7、起别名8、去重9、+号的作用二、条件查询1、按条件表达式筛选2、按逻辑表达式筛选三、模糊查询四、排序查询五、常见函数1、…...

redis+token+分布式锁确保接口的幂等性
目录 1.幂等性是什么? 2.如何实现幂等性呢? 1.新增管理员,出弹窗的同时,请求后台。 2.后端根据雪花算法生成唯一标识key,以雪花数为key存到redis。并返回key给前端。 3.前端保存后端传过来的key。 4.前端输入完成…...

Vue模版语法
目录 接下来学习click 例题:修改背景颜色 例题:反复点击button按钮,可以不断切换背景颜色 先看以下例题是回顾vue的用法 <body><div id"box">{{myname}} - {{myage}}</div><script>var vm new Vue({el…...

新一代开源流数据湖平台Apache Paimon入门实操-上
文章目录 概述定义核心功能适用场景架构原理总体架构统一存储基本概念文件布局 部署环境准备环境部署 实战Catalog文件系统Hive Catalog 创建表创建Catalog管理表查询创建表(CTAS)创建外部表创建临时表 修改表修改表修改列修改水印 概述 定义 Apache Pa…...

ELK 企业级日志分析系统(一)
目录 一、ELK 简介 1.1 组件说明 1.2 为什么要使用ELK 1.3 完整日志系统的基本特征 1.4 ELK工作原理 二、Elasticsearch的介绍 2.1 Elasticsearch的核心: 三、Logstash 3.1 Logstash简介 四、Kibana 五、部署ELK日志分析系统 5.1 服务器配置 5.2 ELK Elasticse…...
2023-08-01力扣今日二题-Hard-DPLIS优先队列-好题
链接: 354. 俄罗斯套娃信封问题 题意: 一个信封有长宽,如果一个信封的长宽均严格大于另一个信封,那么大的这个信封可以装下小的这个信封 求最多能套娃几个信封 解: 类似普通的最长上升子序列,但是信封…...

并发 如何创建线程 多线程
进程:一个程序的执行过程 线程:一个方法就是一个线程 并发:多个线程抢夺一个资源 操作同一个对象 创建线程方法1 //创建线程方法1 继承Thread类 重写润方法 调用start开启线程 public class TestThead extends Thread{Overridepublic voi…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...