首页
归档
朋友
关于我
留言
Search
1
虚拟机无法ping不通百度,并无法访问浏览器
4,847 阅读
2
mysql使用or条件使索引失效
4,061 阅读
3
mysql如何在一对多查询时选取时间最近的一条记录
3,475 阅读
4
根据MySQL获取当天,昨天,本周,本月,上周,上月,本月的起始时间
2,927 阅读
5
熟悉mysql的共享锁、排它锁、悲观锁、乐观锁以及使用场景
1,766 阅读
PHP
面向对象
设计模式
知识汇总
常用函数
PHP框架知识
数据库
MySQL
服务器
Docker
虚拟机
Nginx
缓存相关
Redis
前端
中间件
RabbitMQ
网络编程
HTTP相关
Swoole
Workerman
工具软件
Git
Typecho
杂乱无章
面试指南
PHP相关
MySQL面试汇总
中间件相关
开发技巧 | 优化
登录
Search
标签搜索
php
mysql
代码片段
linux
Thinkphp
Redis
nginx
mysql优化
docker
面试指南
面向对象
git
Laravel框架
http协议
RabbitMQ
Redis性能优化
设计模式
linux命令
编译安装
PhpSpreadsheet
黎明强
累计撰写
70
篇文章
累计收到
59
条评论
首页
栏目
PHP
面向对象
设计模式
知识汇总
常用函数
PHP框架知识
数据库
MySQL
服务器
Docker
虚拟机
Nginx
缓存相关
Redis
前端
中间件
RabbitMQ
网络编程
HTTP相关
Swoole
Workerman
工具软件
Git
Typecho
杂乱无章
面试指南
PHP相关
MySQL面试汇总
中间件相关
开发技巧 | 优化
页面
归档
朋友
关于我
留言
搜索到
6
篇与
常用函数
的结果
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日
1,176 阅读
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日
1,576 阅读
0 评论
0 点赞
2020-11-10
php替换富文本内容的所有img的链接或者其他内容
第一种 :img标签 追加绝对路径$httpUlr = 'http://www.xxx.com/'; $str = '<p>放假啊少打飞机啊速度开了个家里卡圣诞节</p> <p> </p> <p><img src="/uploads/20190326/cad4dcb78fca9e98cf1c45553f0a1a99.jpg" alt="" width="100" height="100" /></p>'; preg_replace('/src="\//', 'src="'."$httpUlr".'/', $str);替换src的内容以及链接$text = '内容<img src="http://www.test.com/test1.jpg">内容'; $replaceSrc = 'http://www.test.com/test2.jpg';//要替换的src echo preg_replace('#<img(.+?)src="([^"]+?)"([^>]*?)>#',"<img$1src=\"$replaceSrc\"$3>",$text); //内容<img src="http://www.test.com/test2.jpg">内容
2020年11月10日
848 阅读
0 评论
0 点赞
2020-11-10
日期统计表数据,mysql没数据的日期进行补充日期
统计用到的日期,不用foreach循环得到日期再查N天的N条sql,效率比较低换一种方法,查一遍sql得出日期,比如一个月就 1-2 ,1-3,1-5才有数据,但统计要展示1-30号,将其他没数据补充日期,数据填充0注意的是:先查询得到sql数据,再补充日期,而不是得到日期再循环体内操作mysql得到统计。比如30天就循环30条sql 非常不友好第一步 $month = Request::param('month', date('Y-m')); $startMonth = date("Y-m-01", strtotime( $month)); $endMonth = date("Y-m-d", strtotime($month));第二步(得到数据) $view = self::alias('m') ->join('custom c','c.message_no=m.message_no','left') ->join('ts_custom ts','ts.message_no=c.message_no') ->where('follow_stage','in',[8,9,10,11,12,13]) ->whereRaw("DATE_FORMAT( ts.done_time, '%Y-%m-%d' ) BETWEEN "."'$startMonth ' and ". "'$endMonth'") ->field($field); $log = $view->group("DATE_FORMAT(ts.done_time, '%Y-%m-%d')")->order('date asc')->select()->toArray();第三步$str = ['date'=>'','follow_stage_8'=>'']; DataFillDate($log,[$startMonth,$endMonth],$str); /* * * 填补输出数据(天) * @param $log array 数据 (先查询好数据再操作如下) * @param $arr_time array 时间区间 * @param $ex_path array 数据结构 * */ function DataFillDate($log,$arr_time = [],$str = []) { $i = 0; $j = 0; $dateL = []; $date[0] = $arr_time[0]; //将需要的开始跟结束日期,进行并且得出需要多少天 ,比如 2020-1-3 ~ 2020-1-31 。中间相差28天。 $stimestamp = strtotime($arr_time[0]); $etimestamp = strtotime($arr_time[1]); // 计算日期段内有多少天 $days = ($etimestamp-$stimestamp)/86400+1; // 保存每天日期 $date = array(); //循环得到的日期 for($i=0; $i<$days; $i++){ $date[] = date('Y-m-d', $stimestamp+(86400*$i)); } //mysql得到的日期条数 foreach ($log as $key => $val){ $dateL[$key] = $val['date']; } //进行差异比较 count($dateL) > 0 ? $c = array_diff($date,$dateL) : $c = $date; //这一段进行数据填充0 $strR = []; foreach ($c as $k => $kv){ foreach ($str as $s => $sv){ $strR[$k][$s] = $s =='date' ? $kv : '0'; } } $res = array_merge($strR,$log); foreach ($res as $r => $rv){ $key = substr($rv['date'],0,4).substr($rv['date'],5,2).substr($rv['date'],8,10); $dd[$key] = $rv; } //再排序 rsort($dd); return $dd; }
2020年11月10日
812 阅读
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,676 阅读
0 评论
1 点赞
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日
1,213 阅读
1 评论
0 点赞