自寫php常用公共函式(非系統函式),關鍵的時候用得著[thinkPHP5框架]
阿新 • • 發佈:2019-01-28
本文基於thinkPHP5框架,但不限於它,需要的時候把需要的地方改成你需要的就可以用了:
例如:你的框架是CI,那麼查詢資料就不是用Db了,稍微修改即可
<?php use service\DataService; use service\NodeService; use think\Db; /** * 日期格式標準輸出 * @param string $datetime 輸入日期 * @param string $format 輸出格式 * @return false|string */ function format_datetime($datetime, $format = 'Y年m月d日 H:i:s') { return date($format, strtotime($datetime)); } /** * UTF8字串加密 * @param string $string * @return string */ function encode($string) { list($chars, $length) = ['', strlen($string = iconv('utf-8', 'gbk', $string))]; for ($i = 0; $i < $length; $i++) { $chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0); } return $chars; } /** * UTF8字串解密 * @param string $string * @return string */ function decode($string) { $chars = ''; foreach (str_split($string, 2) as $char) { $chars .= chr(intval(base_convert($char, 36, 10))); } return iconv('gbk', 'utf-8', $chars); } /** * description:獲取某張表的欄位 * author:wanghua * @param $tablename * @return array */ function getTableFieldsByName($tablename){ if(!$tablename)return []; $prefix = config('database.prefix'); if($prefix && false !== strpos($tablename, $prefix)) $tablename = $prefix.$tablename; return Db::table($tablename)->getTableFields(); } /** * description:換行輸出(一般用於除錯 eg:在迴圈中輸出) * author:wanghua */ function brEcho($msg){ echo '<br/>'; echo $msg; echo '<br/>'; } /** * description:常用表單型別 1 input 2 select 3 radio 4 textarea 5 textarea_editer 6 img * author:wanghua * @param string $type * @param bool|false $all * @return array|string */ function getFormType($type='', $all=false){ $arr = ['','input','date','select','radio','textarea','textarea_editer', 'img']; if($type){ if(is_numeric($type)){ return isset($arr[$type])?$arr[$type]:$type; }else{ return $type; } } if($all){ return $arr; } return ''; } /** * description:根據下標獲取欄位型別(常用且可配置) * author:wh */ function getFieldsType($type='', $all=false){ $arr = ['','int','float','varchar','text','longtext']; if($type){ return empty($arr[$type])?$type:$arr[$type]; } if($all){ return $arr; } return $type; } /** * description:網站選單列表(這裡只是例子) * author:wh * @param $type 下標值 * @param string $all 返回所有 * @return array */ function getMenuType($type, $all=''){ $arr = [ 1=>'首頁', 2=>'關於我們', 3=>'課程設定', 4=>'招生資訊', 5=>'師資隊伍', 6=>'優秀學生', 7=>'新聞資訊', 8=>'聯絡我們' ]; if($type){ return empty($arr[$type])?$type:$arr[$type]; } if($all){ return $arr; } return $type; } /** * description:讀取base64編碼後的圖片並儲存到path(實測可用) * author:wh * @param $base64_image_content * @param $path * @return bool|string */ function base64_image_content($base64_image_content,$path){ //匹配出圖片的格式 if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){ $type = $result[2]; $new_file = $path."/".date('Ymd',time())."/"; if(!file_exists($new_file)){ //檢查是否有該資料夾,如果沒有就建立,並給予最高許可權 mkdir($new_file, 0777); } $new_file = $new_file.time().".{$type}"; if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){ return '/'.$new_file; }else{ return false; } }else{ return false; } } /** * 驗證手機號是否正確(常規) * @author wanghua */ function is_mobile($mobile) { if (!is_numeric($mobile)) { return false; } return preg_match('#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^17[0,6,3,7,8]{1}\d{8}$|^18[\d]{9}$#', $mobile) ? true : false; } /** * description:查詢當前資料庫所有的表名 * author:wh * @return mixed 返回表名一維陣列 */ function getTables(){ return array_column(Db::query('SHOW TABLES;'), 'Tables_in_'.config('database.database')); } /** * description:獲取專案根路徑 * author:wanghua */ if (!function_exists('get_root_path')) { function get_root_path(){ $str = str_replace('\\', '/', APP_PATH); return $str.'..'; } } /** * 驗證郵箱格式(常規) */ function is_email($email){ return preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)?true:false; } /** * description:刪除目錄下的檔案:許可權不足可能導致失敗 * author:wanghua * @param $backpath * @return bool */ function deleteFile($path=''){ if(!$path|| !file_exists($path))return false; $files = scandir($path); if($files){ foreach ($files as $key => $val){ if(!in_array($val, ['.', '..'])){ unlink($path.$val); } } return true; }else{ return false; } } if(!function_exists('log_to_write_txt')){ /** * 記錄日誌文字到.txt檔案-日誌檔案可即時刪除 * wanghua * @param string $data * @param string $filepath 預設儲存路徑 */ function log_to_write_txt($data = 'test', $filepath = '/runtime/log.txt'){ //IP白名單-正式運營後可開啟 //$white_ips = [ // '183.67.48.137' //]; //if(in_array(get_client_ip(), $white_ips)){ $filepath = get_root_path().$filepath; $str = ''; file_put_contents($filepath, is_object($data)||is_array($data)?$str.json_encode($data)."\n":$str.$data."\n", FILE_APPEND); //}else{ // file_put_contents($filepath, 'white_ips have not check success '."\n", FILE_APPEND); //} } } /** * description:二維物件陣列轉換為二維陣列 * author:wanghua */ if (!function_exists('objToArray')) { function objToArray($peoples){ $tmp = []; foreach ($peoples as $k=>$v){ $tmp[$k] = is_object($v)?$v->toArray():$v; } return $tmp; } } //將XML字串轉為array if (!function_exists('xmlStrToArray')) { function xmlStrToArray($xml){ //禁止引用外部xml實體 libxml_disable_entity_loader(true); $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $values; } } /** * description:產生一個訂單號 * 說明:userid一般是定長 * author:wanghua */ if (!function_exists('createOrderNo')) { function createOrderNo(){ return time().session('user.userid').rand(10000,99999); } } /** * 輸出xml字元 * @throws WxPayException **/ if (!function_exists('toXml')) { function toXml($data){ if(!is_array($data) || count($data) <= 0){ throw new WxPayException("陣列資料異常!"); } $xml = "<xml>"; foreach ($data as $key=>$val){ if (is_numeric($val)){ $xml.="<".$key.">".$val."</".$key.">"; }else{ $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } } $xml.="</xml>"; return $xml; } } /** * description:返回xml 物件 * author:wanghua * @param bool $res * @return string */ if (!function_exists('xmlResReturn')) { function xmlResReturn($res = true){ $tmp_suc = $res?'SUCCESS':'FAIL'; $tmp_ok = $res?'OK':'ERR'; $xml = "<xml> <return_code><![CDATA[{$tmp_suc}]]></return_code> <return_msg><![CDATA[{$tmp_ok}]]></return_msg> </xml>"; return simplexml_load_string($xml); } } /** * XML編碼 * @param mixed $data 資料 * @param string $encoding 資料編碼 * @param string $root 根節點名 * @return string */ if (!function_exists('xml_encode')) { function xml_encode($data, $encoding='utf-8', $root='xml') { $xml = '<?xml version="1.0" encoding="' . $encoding . '"?>'; $xml .= '<' . $root . '>'; $xml .= data_to_xml($data); $xml .= '</' . $root . '>'; return $xml; } } /** * 資料XML編碼 * @param mixed $data 資料 * @return string */ if (!function_exists('data_to_xml')) { function data_to_xml($data) { $xml = ''; foreach ($data as $key => $val) { is_numeric($key) && $key = "item id=\"$key\""; $xml .= "<$key>"; $xml .= ( is_array($val) || is_object($val)) ? data_to_xml($val) : $val; list($key, ) = explode(' ', $key); $xml .= "</$key>"; } return $xml; } } /** * description:設定結果(常用於非同步請求返回格式) * author:wanghua * @param int $code * @param string $msg * @param array $data * @param bool $is_return_json 是否返回json * @return array|string */ if (!function_exists('set_res')) { function set_res($code = 0, $msg = '', $data = [], $is_return_json = false){ $r = ['code' => $code, 'msg' => $msg, 'data'=>$data]; return $is_return_json?json_encode($r):$r; } } /** * description:curl請求(整理於微信) * author:wanghua * @param $url * @return mixed */ if (!function_exists('req_url')) { function req_url($url){ //初始化curl $ch = curl_init(); //設定超時 curl_setopt($ch, CURLOPT_TIMEOUT, 180);//$this->curl_timeout curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //使用代理抓取內容 //if(\Config::CURL_PROXY_HOST != "0.0.0.0" // && \Config::CURL_PROXY_PORT != 0){ // curl_setopt($ch,CURLOPT_PROXY, '0.0.0.0'); // curl_setopt($ch,CURLOPT_PROXYPORT, 0); //} //執行curl,結果以jason形式返回 $res = curl_exec($ch); curl_close($ch); //取出openid return json_decode($res,true); } } if (!function_exists('rand_str')) { /** * 生成隨機字串 * @param int $length 生成長度 * @param int $type 生成型別:0-小寫字母+數字,1-小寫字母,2-大寫字母, * 3-數字,4-小寫+大寫字母,5-小寫+大寫+數字 * @return string */ function rand_str($length = 8, $type = 0) { $a = 'abcdefghijklmnopqrstuvwxyz'; $A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $n = '0123456789'; switch ($type) { case 1: $chars = $a; break; case 2: $chars = $A; break; case 3: $chars = $n; break; case 4: $chars = $a.$A; break; case 5: $chars = $a.$A.$n; break; default: $chars = $a.$n; } $str = ''; for ($i = 0; $i < $length; $i++) { $str .= $chars[ mt_rand(0, strlen($chars) - 1) ]; } return $str; } } if(!function_exists('arrArrToSort')){ /** * description:php二維陣列排序(升、降) * author:wanghua * @param $data 資料來源(必須是二維陣列) * @param $field 要排序的欄位(必須) eg:年齡或者價格 * @param bool $sort 排序方式 * @param bool $unique_field 指定唯一欄位 eg:例如userID一般都是唯一的 * @return array 返回排序後的資料來源 */ function arrArrToSort($data, $field, $sort=true, $unique_field){ //取出排序源 $field_arr_key = array_column($data, $unique_field); $field_arr_val = array_column($data, $field); $source_arr = []; foreach ($field_arr_key as $key=>$val){ $source_arr[$val] = $field_arr_val[$key]; } //排序 if($sort)arsort($source_arr); else asort($source_arr) ; //重組資料 $new_arr = []; foreach ($source_arr as $k=>$v){ foreach ($data as $a=>$b){ if($k == $b[$unique_field]){ array_push($new_arr, $b); } } } return $new_arr; } } if(!function_exists('returnDateString')){ /** * description:日期換算為 今天 昨天 2天前 一週前 一個月前 一年前 * author:wanghua * @param $date 時間戳 */ function returnDateString($date){ $date = $date*1; $arr = [ 0=>'今天', 1=>'昨天', 2=>'前天', 7=>'一週前', 30=>'一個月前', 365=>'一年前', -1=>'很久以前', ]; //今天 $today = strtotime(date('Y-m-d')); if(($date-$today)>=0){ return $arr[0]; }else if(($date-$today)<0 && ($today-$date)<=86400){ return $arr[1]; }else if(($date-$today)<0 && ($today-$date)<=86400*2){ return $arr[2]; }else if(($date-$today)<0 && ($today-$date)<=86400*7){ return $arr[7]; }else if(($date-$today)<0 && ($today-$date)<=86400*30){ return $arr[30]; }else if(($date-$today)<0 && ($today-$date)<=86400*365){ return $arr[365]; } return $arr[-1]; } } if(!function_exists('keyValByArrArr')){ /** * description:返回由二維陣列的其中兩個欄位(鍵)組成的一維陣列 * author:wanghua */ function keyValByArrArr($data, $key, $key2){ $data = objToArray($data); $arr = array_column($data, $key); $arr2 = array_column($data, $key2); $tmp = []; foreach ($arr as $k=>$v){ $tmp[$v]=$arr2[$k]; } return $tmp; } } if(!function_exists('returnArrSomeOne')){ /** * description:查詢二維陣列中某一條資料 * author:wanghua */ function returnArrSomeOne($data, $field, $val){ foreach ($data as $k=>$v){ if($v[$field] == $val){ return $v; } } return false; } } if(!function_exists('getTabFieldByCon')){ /** * description:查詢資料,返回這個欄位的列 * author:wanghua * @param $table * @param $field */ function getTabFieldByCon($table, $field, $condition=[]){ if($condition) { $d = Db::table($table)->field($field)->where($condition)->find(); return $d[$field]; } else { $d = Db::table($table)->field($field)->select(); return array_column($d, $field); } } } if(!function_exists('replace_unicode_escape_sequence')){ /** * description: 呼叫 $name = '\u65b0\u6d6a\u5fae\u535a'; $data = unicodeDecode($name); //輸出新浪微博 * author:wanghua * @param $match * @return string */ function replace_unicode_escape_sequence($match) { return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); } } if(!function_exists('unicodeDecode')){ /** * description:中文被unicode編碼後了的資料,解碼出中文 Unicode解碼 * author:wanghua * @param $data * @return null|string|string[] */ function unicodeDecode($data){ $rs = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $data); return $rs; } } if(!function_exists('unicodeEncode')){ /** * description:unicode編碼 * author:wanghua * @param $str * @return string */ function unicodeEncode($str){ //split word preg_match_all('/./u',$str,$matches); $unicodeStr = ""; foreach($matches[0] as $m){ //拼接 $unicodeStr .= "&#".base_convert(bin2hex(iconv('UTF-8',"UCS-4",$m)),16,10); } return $unicodeStr; } }