首页
归档
朋友
关于我
留言
推荐
Wiki知识库
Search
1
虚拟机无法ping不通百度,并无法访问浏览器
3,903 阅读
2
mysql使用or条件使索引失效
2,013 阅读
3
mysql如何在一对多查询时选取时间最近的一条记录
1,620 阅读
4
git常用命令大全
1,392 阅读
5
根据MySQL获取当天,昨天,本周,本月,上周,上月,本月的起始时间
1,381 阅读
PHP
面向对象
设计模式
代码片段
常用函数
数据库
MySQL
服务器
Docker容器
虚拟机
缓存知识
Nginx
前端
中间件
网络编程
工具软件
Git
杂乱无章
面试指南
MySQL面试
登录
Search
标签搜索
php
mysql
代码片段
linux
Redis
nginx
Thinkphp
mysql优化
docker
面向对象
git
Laravel框架
http协议
缓存
Redis性能优化
linux命令
编译安装
PhpSpreadsheet
导出excel
构造器
黎明强
累计撰写
64
篇文章
累计收到
24
条评论
首页
栏目
PHP
面向对象
设计模式
代码片段
常用函数
数据库
MySQL
服务器
Docker容器
虚拟机
缓存知识
Nginx
前端
中间件
网络编程
工具软件
Git
杂乱无章
面试指南
MySQL面试
页面
归档
朋友
关于我
留言
推荐
Wiki知识库
搜索到
4
篇与
常用函数
的结果
2021-04-22
PhpSpreadsheet实现导入&导出功能
前文导入excel的文本内容如下代码演示composer安装PhpSpreadsheet (这是新的Excel类库),不用旧的PHPExcel的类库,旧的已被官网弃用不维护了!!前端代码<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="./index5.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileUpload" /> <input type="submit" value="上传文件" /> </form> </body> </html>后端代码 require_once 'vendor/autoload.php'; $filePath = $_FILES['fileUpload']['tmp_name']; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $reader->setReadDataOnly(TRUE); $spreadsheet = $reader->load($filePath); //载入excel表格 $worksheet = $spreadsheet->getActiveSheet(); $highestRow = $worksheet->getHighestRow(); // 总行数 $highestColumn = $worksheet->getHighestColumn(); // 总列数 $highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5 $lines = $highestRow - 1; if ($lines <= 0) { exit('Excel表格中没有数据'); } $import_data = []; for ($i = 2; $i <= $highestRow; $i++) { $import_data[$i]['id'] = $spreadsheet->getActiveSheet()->getCell("A" . $i)->getValue(); $import_data[$i]['nick_name'] = $spreadsheet->getActiveSheet()->getCell("B" . $i)->getValue(); $import_data[$i]['number'] = $spreadsheet->getActiveSheet()->getCell("C" . $i)->getValue(); $import_data[$i]['vip_number'] = $spreadsheet->getActiveSheet()->getCell("D" . $i)->getValue(); $import_data[$i]['card'] = $spreadsheet->getActiveSheet()->getCell("E" . $i)->getValue(); } $import_data = array_values($import_data);//重置索引 echo "<pre>"; print_r($import_data);exit; exit; 第二种方式不用$spreadsheet读取的文件的变量句柄,用 $worksheet获取所有的表格行数,先获取某一个sheet。 require_once 'vendor/autoload.php'; $filePath = $_FILES['fileUpload']['tmp_name']; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $reader->setReadDataOnly(TRUE); $spreadsheet = $reader->load($filePath); //载入excel表格 $worksheet = $spreadsheet->getActiveSheet(); $highestRow = $worksheet->getHighestRow(); // 总行数 $highestColumn = $worksheet->getHighestColumn(); // 总列数 $highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5 $lines = $highestRow - 1; if ($lines <= 0) { exit('Excel表格中没有数据'); } for ($row = 2; $row <= $highestRow; ++$row) { $temp = array( 'id' => $worksheet->getCellByColumnAndRow('1', $row)->getValue(), 'nick_name' => $worksheet->getCellByColumnAndRow('2', $row)->getValue(), 'number' => $worksheet->getCellByColumnAndRow('3', $row)->getValue(), 'vip_number' => $worksheet->getCellByColumnAndRow('4', $row)->getValue(), 'card' => $worksheet->getCellByColumnAndRow('5', $row)->getValue(), 'other' => $worksheet->getCellByColumnAndRow('6', $row)->getValue(), 'addr' => $worksheet->getCellByColumnAndRow('7', $row)->getValue(), ); $list[] = $temp; } echo "<pre>"; print_r($list);exit;这样就可以根据数据入数据库了导出 require_once 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use PhpOffice\PhpSpreadsheet\Cell\DataValidation; use PhpOffice\PhpSpreadsheet\IOFactory; function exportExcel(){ //定义一个excel的header表头 $header = ['A1' => '序号', 'B1' => '姓名', 'C1' => '证件号', 'D1' => '张数', 'E1' => '证件类型', 'F1' => '省', 'G1' => '市', 'H1' => '区/镇', 'I1' => '类别', 'J1' => '设计人', 'K1' => '完成时间', 'L1' => '备注']; $list = [ ['id'=>1,'name'=>'黎明强','card'=>'13800','number'=>10], ['id'=>2,'name'=>'黎明','card'=>'13811','number'=>100], ['id'=>3,'name'=>'黎明强森','card'=>'13822','number'=>200], ['id'=>4,'name'=>'黎明强2','card'=>'13833','number'=>300], ['id'=>5,'name'=>'黎明强3','card'=>'13844','number'=>400], ]; $spreadsheet = new Spreadsheet(); $sheetMain = $spreadsheet -> getsheet(0);//主sheet $sheetMain -> setTitle('人员信息');//设置sheet的名称 $sheetMain -> getPageSetup() -> setHorizontalCentered(true); $sheetMain -> getPageSetup() -> setVerticalCentered(false); foreach ($header as $key => $value) { $sheetMain -> setCellValue($key, $value); } $row = 2; //从第二行开始 foreach ($list as $item) { $column = 1; foreach ($item as $value) { $sheetMain->setCellValueByColumnAndRow($column, $row, $value); $column++; } $row++; } //定义文件名称,需要带有定义的后缀名 $filename = 'test.xlsx'; ob_end_clean(); //清除缓冲区,避免乱码 //将输出重定向到客户端的web浏览器 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $filename . '"'); header('Cache-Control: max-age=0'); //如果浏览器为IE9 header('Cache-Control: max-age=1'); //如果通过SSL向IE提供服务 header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: cache, must-revalidate');//HTTP/1.1 header('Pragma: public');//HTTP/1.0 $writer = IOFactory ::createWriter($spreadsheet, 'Xlsx'); //指定格式 $writer -> save('php://output'); exit; }运行exportExcel();
2021年04月22日
423 阅读
2 评论
0 点赞
2020-11-11
array_filter()、array_map()、array_walk()三者的用法和区别
用法 array_filter() 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,返回过滤后的数组 array_map() 重点在于遍历一个数组或多个数组的元素,返回一个新的数组 array_walk() 重点在于遍历数组进行某种操作区别array_filter() 和 array_walk()对一个数组进行操作,数组参数在前,函数参数在后array_map() 可以处理多个数组,因此函数参数在前,数组参数在后,可以根据实际情况放入多个数组参数array_filter() 该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。【如果没callback 就默认过滤false,空字符串空数组等】//没有回调函数的情况下,可以过滤false、空等数组 $arr =[1,2,false,0,'',3,4]; $new_arr = array_filter($arr); var_dump($arr); /*array(4) { [0]=> int(1) [1]=> int(2) [5]=> int(3) [6]=> int(4) }*/ $arr = ['a','b',1,2,3]; $new_arr = array_filter($arr,function($val){ return is_numeric($val); }); var_dump($new_arr); //返回结果 //array (size=3) // 2 => int 1 // 3 => int 2 // 4 => int 3array_map()该函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。可以传递多个数组,回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。$arr1 = [1,2,3,4,5]; $arr2 = [6,7,8,9,10]; //函数写前面,数组参数写后面 (callback后面可以传入多个数组....) $new_arr = array_map(function($val1,$val2){ return $val1 + $val2; },$arr1,$arr2); var_dump($new_arr); //返回结果 //array (size=5) // 0 => int 7 // 1 => int 9 // 2 => int 11 // 3 => int 13 // 4 => int 15array_walk()对数组中的每个元素应用用户自定义函数//将数组中的元素用于某种操作 $arr = ['a','b','c']; array_walk($arr,function($val,$key){ echo "{$key} is {$val} <br/>"; }); //返回结果 //0 is a //1 is b //2 is c //改变数组中的值,传参的时候使用引用 array_walk($arr,function(&$val,$key){ $val .= $val; }); var_dump($arr); //array (size=3) // 0 => string 'aa' (length=2) // 1 => string 'bb' (length=2) // 2 => string 'cc' (length=2)
2020年11月11日
824 阅读
0 评论
0 点赞
2020-11-10
PHP用户名用星号(*)处理或者手机号隐藏某一段
手机号星号屏蔽(简单版)//函数 【替换字符串的子串】 $phone = '15625599765'; //从第三位截取5个变成* $phone = substr_replace($phone,'***',3,5); echo $phone; //输出 : 156***765 //函数 【返回字符串的子串】 $mobile = '13912345678'; $newMobile1 = substr($mobile, 0, 5).'****'.substr($mobile, 9); echo $newMobile1; //13912****78 //正则 $mobile = '15625599765'; //d1 :首位长度 ,d2 尾部长度 $newMobile3 = preg_replace('/(\d{3})\d{4}(\d{2})/', '$1****$2', $mobile); echo $newMobile3; //156****9765用户名字星号屏蔽(支持UFT-8跟GB2312)// UTF-8中文正则:"/[\x{4e00}-\x{9fa5}]+/u" // GB2312中文正则:"/[".chr(0xa1)."-".chr(0xff)."]+/" $str = '黎明强'; //输出黎*强 $str ='黎明'; //黎* //判断是否包含中文字符 if(preg_match("/[\x{4e00}-\x{9fa5}]+/u", $str)) { //按照中文字符计算长度 $len = mb_strlen($str, 'UTF-8'); //echo '中文'; if($len >= 3){ //三个字符或三个字符以上掐头取尾,中间用*代替 $str = mb_substr($str, 0, 1, 'UTF-8') . '*' . mb_substr($str, -1, 1, 'UTF-8'); } elseif($len == 2) { //两个字符 $str = mb_substr($str, 0, 1, 'UTF-8') . '*'; } } else { //按照英文字串计算长度 $len = strlen($str); //echo 'English'; if($len >= 3) { //三个字符或三个字符以上掐头取尾,中间用*代替 $str = substr($str, 0, 1) . '*' . substr($str, -1); } elseif($len == 2) { //两个字符 $str = substr($str2, 0, 1) . '*'; } } echo $str;
2020年11月10日
1,019 阅读
0 评论
0 点赞
2020-11-08
PHP生成随机字符串
当我们需要生成一个随机名字,临时密码等字符串时可以用到下面的函数:代码如下function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; }使用方法echo generateRandomString(20);生成随机字符串/** * 随机生成字符串 * @param int $length * @return null|string */ private static function getRandChar($length = 8){ $str = null; $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; $max = strlen($strPol)-1; for($i=0;$i<$length;$i++){ $str.=$strPol[rand(0,$max)]; //rand($min,$max)生成介于min和max两个数之间的一个随机整数 } return $str; }
2020年11月08日
625 阅读
0 评论
0 点赞