ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## **订单号函数:** ~~~ public static function makeOrderNo() { $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'); $orderSn = $yCode[intval(date('Y')) - 2017] . strtoupper(dechex(date('m'))) . date( 'd') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf( '%02d', rand(0, 99)); return $orderSn; } ~~~ ## **带排序的文章上一篇下一篇** ``` /** * 上一篇 * @param [type] $id [description] * @param integer $company_id [description] * @param integer $len [description] * @param integer $cate_id [description] * @return [type] [description] */ function news_prev($id, $company_id=0, $len=25, $cate_id=0){ $sql=" SELECT id,title,sort FROM ( SELECT (@fr :=@fr + 1) AS rowno, news.* FROM tp_news As news, (SELECT(@fr := 0)) b WHERE status = 1 AND cate_id = {$cate_id} AND company_id = {$company_id} ORDER BY sort ASC, id DESC ) aa, ( SELECT rowno -1 AS newno FROM ( SELECT (@sr :=@sr + 1) AS rowno, news.id FROM tp_news As news, (SELECT(@sr := 0)) b WHERE status = 1 AND cate_id = {$cate_id} AND company_id = {$company_id} ORDER BY sort ASC, id DESC ) new WHERE new.id = {$id} ) bb WHERE aa.rowno = bb.newno; "; $__prev__=\think\facade\Db::query($sql); // dump($__prev__); if (empty($__prev__)) { echo ""; return; }else{ $__prev__=$__prev__[0]; $__prev__['title'] = mb_substr($__prev__['title'], 0, $len); $param=['id'=>$__prev__['id']]; if (is_numeric($company_id) && $company_id>0) { $param['cmid']=$company_id; $__prev__['url']=(string)url("Company/detail", $param); } $res='<a title="'.$__prev__['title'].'" href="'.$__prev__['url'].'">'.$__prev__['title'].'</a>'; echo $res; } } /** * 下一篇 * @param [type] $id [description] * @param integer $company_id [description] * @param integer $len [description] * @param integer $cate_id [description] * @return [type] [description] */ function news_next($id, $company_id=0, $len=25, $cate_id=0){ $sql=" SELECT id,title,sort FROM ( SELECT (@fr :=@fr + 1) AS rowno, news.* FROM tp_news As news, (SELECT(@fr := 0)) b WHERE status = 1 AND cate_id = {$cate_id} AND company_id = {$company_id} ORDER BY sort ASC, id DESC ) aa, ( SELECT rowno +1 AS newno FROM ( SELECT (@sr :=@sr + 1) AS rowno, news.id FROM tp_news As news, (SELECT(@sr := 0)) b WHERE status = 1 AND cate_id = {$cate_id} AND company_id = {$company_id} ORDER BY sort ASC, id DESC ) new WHERE new.id = {$id} ) bb WHERE aa.rowno = bb.newno "; $__next__=\think\facade\Db::query($sql); if (empty($__next__)) { echo ""; return; }else{ $__next__=$__next__[0]; $__next__['title'] = mb_substr($__next__['title'], 0, $len); $param=['id'=>$__next__['id']]; if (is_numeric($company_id) && $company_id>0) { $param['cmid']=$company_id; $__next__['url']=(string)url("Company/detail", $param); } $res='<a title="'.$__next__['title'].'" href="'.$__next__['url'].'">'.$__next__['title'].'</a>'; echo $res; } } ``` ## **获取php的执行文件** ``` define('IS_CLI', PHP_SAPI == 'cli' ? true : false); define('IS_WIN', strpos(PHP_OS, 'WIN') !== false); function detect_php_exe(){ static $php_filename=null; if(!isset($php_filename)){ $ds=DIRECTORY_SEPARATOR; $ini_all=ini_get_all(); //D:\phpstudy_pro\Extensions\php\php7.3.9nts\ext $php_ext_path=$ini_all['extension_dir']['local_value']; if($php_ext_path){ $php_ext_path=preg_replace("/[\/\\\]+/", '/', $php_ext_path); $phpPaths=explode('/', $php_ext_path); $phpPath=''; if(IS_WIN){ foreach ($phpPaths as $v){ $phpPath.=$v.$ds; if(is_file($phpPath.'php-cli.exe')){ $php_filename=$phpPath.'php-cli.exe'; break; }elseif(is_file($phpPath.'php.exe')){ //$phpPath: D:\phpstudy_pro\Extensions\php\php7.3.9nts\ $php_filename=$phpPath.'php.exe'; break; } } }else{ foreach ($phpPaths as $v){ $phpPath.=$v.$ds; if(is_file($phpPath.'bin'.$ds.'php')){ $php_filename=$phpPath.'bin'.$ds.'php'; break; } } } }else{ $php_filename='php'; } } return $php_filename; } $a=detect_php_exe();//D:\phpstudy_pro\Extensions\php\php7.3.9nts\php.exe ``` ## **tp可用函数** ``` //用于返回json格式时 if (!function_exists('responses')) { function responses($code, $msg, $data) { return json([ 'code' => $code, 'msg' => $msg, 'data' => $data ]); } } if (!function_exists('success')) { function success($data, $msg = '', $code = 200) { return responses($code, $msg, $data); } } if (!function_exists('fail')) { function fail($msg, $code = 400, $data = '') { return responses($code, $msg, $data); } } //加盐 if (!function_exists('encrypt_password')) { function encrypt_password($password) { $salt = "dks!afd1safds53kag12423kds"; return md5(md5(trim($password)) . $salt); } } //层级显示 if(!function_exists("get_cate_list")){ //返回无限级分类菜单 function get_cate_list($list,$pid=0,$f=0){ //声明一个静态数组存储处理后的数据 static $arr = []; foreach($list as $val){ if($val['pid']==$pid){ $val['level'] = $f; $arr[]=$val; get_cate_list($list,$val['id'],$f+1); } } return $arr; } } //树状显示 if(!function_exists('get_tree_list')){ //引用方式实现 父子级树状结构 function get_tree_list($list){ //将每条数据中的id值作为其下标 $temp = []; foreach($list as $v){ $v['son'] = []; $temp[$v['id']] = $v; } //获取分类树 foreach($temp as $k=>$v){ $temp[$v['pid']]['son'][] = &$temp[$v['id']]; } return $temp[0]['son'] ?? []; } } ``` ## **返回给定长度的字符** ``` /** * 返回给定长度的字符 * @param string $string 文本 * @param integer $sublen 限制长度 * @param integer $start 开始截取的位置 * @param string $code 编码 * @return string */ function sub_title($string, $sublen, $start = 0, $code = 'UTF-8'){ if ($code == 'UTF-8') { $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; preg_match_all($pa, $string, $t_string); if (count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen)) . "..."; return join('', array_slice($t_string[0], $start, $sublen)); } else { $start = $start * 2; $sublen = $sublen * 2; $strlen = strlen($string); $tmpstr = ''; for ($i = 0; $i < $strlen; $i++) { if ($i >= $start && $i < ($start + $sublen)) { if (ord(substr($string, $i, 1)) > 129) { $tmpstr.= substr($string, $i, 2); } else { $tmpstr.= substr($string, $i, 1); } } if (ord(substr($string, $i, 1)) > 129) $i++; } if (strlen($tmpstr) < $strlen) $tmpstr.= ""; return $tmpstr; } } ``` ``` /** * url get或者post方式请求 * * @param string $url 要请求的url地址 * @param array $data 要发送的数据 存在该参数就启用post提交,否则为get请求 * @return mixed $output 返回请求的结果 */ function honghe_curl($url, $data = null){ // 1.创建一个新的CURL资源 $ch = curl_init(); // 2.设置URL相应的选项 curl_setopt($ch, CURLOPT_URL, $url); // 设置请求的URL地址 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出(0为直接输出) //curl_setopt($ch, CURLOPT_HEADER, 0); // 启用时会将头文件的信息作为数据流输出 curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 设置cURL允许执行的最长秒数 curl_setopt($ch, CURLOPT_POST, $data ? 1 : 0); // 存在data就启用post发送 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //data必须数组 //忽略证书 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 3.抓去URL并将它传递给浏览器 $output = curl_exec($ch); // 4.关闭CURL资源,并且释放系统资源 curl_close($ch); // 返回输出 return $output; } ``` ## **array转xml** ``` /* $params=[ "appid"=>"wxd930ea5d5a258f4f",//公众账号ID "mch_id"=>"10000100",//商户号 "device_info"=>"1000", "body"=>"test",//商品描述 "nonce_str"=>"ibuaiVcKdpRxkhJA",//随机字符串 // "sign_type"=>"HMAC-SHA256",//默认MD5 ]; */ public function arrToXML($arr){ $dom = new \DomDocument('1.0','utf-8'); $xml = $dom->createElement('xml');//创建普通节点:booklist $dom->appendChild($xml);//把xml节点加入到DOM文档中 foreach($arr as $arr_key =>$arr_value){ //创建元素节点 $node1Name = $dom->createElement($arr_key); //-----------而可选------------ //创建节点属性 $node1NameAttribute = $dom->createAttribute ('description'); $node1NameAttribute->value = '属性值'; $node1Name->appendChild($node1NameAttribute); //创建新的注释节点 $node1NameComment = $dom->createComment("注释内容"); $node1Name->appendChild($node1NameComment); //-----------而可选------------ //把节点加入到xml节点中 $xml->appendChild($node1Name); if (is_int($arr_value)) { //创建元素节点的子文本节点 $node1Content = $dom->createTextNode($arr_value); //把节点内容加入到父元素节点中 $node1Name->appendChild($node1Content); }else{ $node1Content = $dom->createCDATASection($arr_value);//创建文CDATA节点 $node1Name->appendChild($node1Content);//把节点内容加入到ToUserName节点中 } } // 输出xml 如果参数为空或者为$dom则会输出全部包括头部的 "<?xml version="1.0" encoding="utf-8"? >" return $dom->savexml($xml); } ``` ## **数组或对象转XML** ``` function arrayToXml($data){ $data=(array)$data; $xml = "<xml>"; foreach ($data as $key=>$val){ echo $val; if(is_array($val)){ $xml.="<".$key.">".arrayToXml($val)."</".$key.">"; }else{ if(is_numeric($val)){ $xml.="<".$key.">".$val."</".$key.">"; }else{ $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } } } $xml.="</xml>"; return $xml; } ``` ## **数组、对象、XML互转** ~~~ $xml= "<xml><appid>123456</appid></xml>";//XML文件 $objectxml = simplexml_load_string($xml);//将文件转换成 对象 $xmljson= json_encode($objectxml );//将对象转换个JSON $xmlarray=json_decode($xmljson,true);//将json转换成数组 ~~~ ~~~ /** * xml转数组或者转对象 * @param string $xmlstr xml格式的字符串 * @param boolean $isObj 为true则返回对象 * @return mixed 返回数组或者对象 */ function xmlStringToArr($xmlstr,$isObj=false){ libxml_disable_entity_loader(true); $objectxml = simplexml_load_string($xmlstr,'SimpleXMLElement',LIBXML_NOCDATA); if(boolval($isObj)){ return $objectxml; } return json_decode(json_encode($objectxml),true); } /** * 数组或者对象转xml * @param mixed $data 要转化的数组或者对象 * @return string 返回xml */ function arrayToXml($data){ $data=(array)$data; $xml = "<xml>"; foreach ($data as $key=>$val){ if(is_array($val)){ $xml.="<".$key.">".arrayToXml($val)."</".$key.">"; }else{ if(is_numeric($val)){ $xml.="<".$key.">".$val."</".$key.">"; }else{ $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } } } $xml.="</xml>"; return $xml; } ~~~ ## **PHP将XML转换成数组/对象** **simplexml\_load\_file($xmlstr,$class\[,options,ns,is\_prefix\])  $class 为转成对象后的对象名** ~~~ $xml= "<xml><name>tom</name></xml>";//XML文件 $objectxml = simplexml_load_string($xml);//将XML字符串转为对象curl获取的需要用到它 simplexml_load_file(filepath);//将xml文档转为对象 xml转数组需要自己写目前没有系统函数(吧?) $xmljson= json_encode($objectxml );//将对象转换个JSON $xmlarray=json_decode($xmljson,true);//将json转换成数组 默认是转对象 ~~~ 使用simplexml\_load\_string之前记得加上libxml\_disable\_entity\_loader(true);//禁用加载外部实体的能力目的是[防止XML注入攻击](https://blog.csdn.net/beyond__devil/article/details/52780354)