直接上代碼,相信以後會用到的 ...
直接上代碼,相信以後會用到的
<?php /** * @param $arr * @param $key_name * @return array * 將資料庫中查出的列表以指定的 id 作為數組的鍵名 */ function convert_arr_key($arr, $key_name) { $arr2 = array(); foreach($arr as $key => $val){ $arr2[$val[$key_name]] = $val; } return $arr2; } function encrypt($str){ return md5(C("AUTH_CODE").$str); } /** * 獲取數組中的某一列 * @param type $arr 數組 * @param type $key_name 列名 * @return type 返回那一列的數組 */ function get_arr_column($arr, $key_name) { $arr2 = array(); foreach($arr as $key => $val){ $arr2[] = $val[$key_name]; } return $arr2; } /** * 獲取url 中的各個參數 類似於 pay_code=alipay&bank_code=ICBC-DEBIT * @param type $str * @return type */ function parse_url_param($str){ $data = array(); $parameter = explode('&',end(explode('?',$str))); foreach($parameter as $val){ $tmp = explode('=',$val); $data[$tmp[0]] = $tmp[1]; } return $data; } /** * 二維數組排序 * @param $arr * @param $keys * @param string $type * @return array */ function array_sort($arr, $keys, $type = 'desc') { $key_value = $new_array = array(); foreach ($arr as $k => $v) { $key_value[$k] = $v[$keys]; } if ($type == 'asc') { asort($key_value); } else { arsort($key_value); } reset($key_value); foreach ($key_value as $k => $v) { $new_array[$k] = $arr[$k]; } return $new_array; } /** * 多維數組轉化為一維數組 * @param 多維數組 * @return array 一維數組 */ function array_multi2single($array) { static $result_array = array(); foreach ($array as $value) { if (is_array($value)) { array_multi2single($value); } else $result_array [] = $value; } return $result_array; } /** * 友好時間顯示 * @param $time * @return bool|string */ function friend_date($time) { if (!$time) return false; $fdate = ''; $d = time() - intval($time); $ld = $time - mktime(0, 0, 0, 0, 0, date('Y')); //得出年 $md = $time - mktime(0, 0, 0, date('m'), 0, date('Y')); //得出月 $byd = $time - mktime(0, 0, 0, date('m'), date('d') - 2, date('Y')); //前天 $yd = $time - mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); //昨天 $dd = $time - mktime(0, 0, 0, date('m'), date('d'), date('Y')); //今天 $td = $time - mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')); //明天 $atd = $time - mktime(0, 0, 0, date('m'), date('d') + 2, date('Y')); //後天 if ($d == 0) { $fdate = '剛剛'; } else { switch ($d) { case $d < $atd: $fdate = date('Y年m月d日', $time); break; case $d < $td: $fdate = '後天' . date('H:i', $time); break; case $d < 0: $fdate = '明天' . date('H:i', $time); break; case $d < 60: $fdate = $d . '秒前'; break; case $d < 3600: $fdate = floor($d / 60) . '分鐘前'; break; case $d < $dd: $fdate = floor($d / 3600) . '小時前'; break; case $d < $yd: $fdate = '昨天' . date('H:i', $time); break; case $d < $byd: $fdate = '前天' . date('H:i', $time); break; case $d < $md: $fdate = date('m月d日 H:i', $time); break; case $d < $ld: $fdate = date('m月d日', $time); break; default: $fdate = date('Y年m月d日', $time); break; } } return $fdate; } /** * 返回狀態和信息 * @param $status * @param $info * @return array */ function arrayRes($status, $info, $url = "") { return array("status" => $status, "info" => $info, "url" => $url); } /** * @param $arr * @param $key_name * @param $key_name2 * @return array * 將資料庫中查出的列表以指定的 id 作為數組的鍵名 數組指定列為元素 的一個數組 */ function get_id_val($arr, $key_name,$key_name2) { $arr2 = array(); foreach($arr as $key => $val){ $arr2[$val[$key_name]] = $val[$key_name2]; } return $arr2; } /** * 自定義函數 判斷 用戶選擇 從下麵的列表中選擇 可選值列表:不能為空 * @param type $attr_values * @return boolean */ function checkAttrValues($attr_values) { if((trim($attr_values) == '') && ($_POST['attr_input_type'] == '1')) return false; else return true; } // 定義一個函數getIP() 客戶端IP, function getIP(){ if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "Unknow"; return $ip; } // 伺服器端IP function serverIP(){ return gethostbyname($_SERVER["SERVER_NAME"]); } /** * 自定義函數遞歸的複製帶有多級子目錄的目錄 * 遞歸複製文件夾 * @param type $src 原目錄 * @param type $dst 複製到的目錄 */ //參數說明: //自定義函數遞歸的複製帶有多級子目錄的目錄 function recurse_copy($src, $dst) { $now = time(); $dir = opendir($src); @mkdir($dst); while (false !== $file = readdir($dir)) { if (($file != '.') && ($file != '..')) { if (is_dir($src . '/' . $file)) { recurse_copy($src . '/' . $file, $dst . '/' . $file); } else { if (file_exists($dst . DIRECTORY_SEPARATOR . $file)) { if (!is_writeable($dst . DIRECTORY_SEPARATOR . $file)) { exit($dst . DIRECTORY_SEPARATOR . $file . '不可寫'); } @unlink($dst . DIRECTORY_SEPARATOR . $file); } if (file_exists($dst . DIRECTORY_SEPARATOR . $file)) { @unlink($dst . DIRECTORY_SEPARATOR . $file); } $copyrt = copy($src . DIRECTORY_SEPARATOR . $file, $dst . DIRECTORY_SEPARATOR . $file); if (!$copyrt) { echo 'copy ' . $dst . DIRECTORY_SEPARATOR . $file . ' failed<br>'; } } } } closedir($dir); } // 遞歸刪除文件夾 function delFile($dir,$file_type='') { if(is_dir($dir)){ $files = scandir($dir); //打開目錄 //列出目錄中的所有文件並去掉 . 和 .. foreach($files as $filename){ if($filename!='.' && $filename!='..'){ if(!is_dir($dir.'/'.$filename)){ if(empty($file_type)){ unlink($dir.'/'.$filename); }else{ if(is_array($file_type)){ //正則匹配指定文件 if(preg_match($file_type[0],$filename)){ unlink($dir.'/'.$filename); } }else{ //指定包含某些字元串的文件 if(false!=stristr($filename,$file_type)){ unlink($dir.'/'.$filename); } } } }else{ delFile($dir.'/'.$filename); rmdir($dir.'/'.$filename); } } } }else{ if(file_exists($dir)) unlink($dir); } } /** * 多個數組的笛卡爾積 * * @param unknown_type $data */ function combineDika() { $data = func_get_args(); $data = current($data); $cnt = count($data); $result = array(); $arr1 = array_shift($data); foreach($arr1 as $key=>$item) { $result[] = array($item); } foreach($data as $key=>$item) { $result = combineArray($result,$item); } return $result; } /** * 兩個數組的笛卡爾積 * @param unknown_type $arr1 * @param unknown_type $arr2 */ function combineArray($arr1,$arr2) { $result = array(); foreach ($arr1 as $item1) { foreach ($arr2 as $item2) { $temp = $item1; $temp[] = $item2; $result[] = $temp; } } return $result; } /** * 將二維數組以元素的某個值作為鍵 並歸類數組 * array( array('name'=>'aa','type'=>'pay'), array('name'=>'cc','type'=>'pay') ) * array('pay'=>array( array('name'=>'aa','type'=>'pay') , array('name'=>'cc','type'=>'pay') )) * @param $arr 數組 * @param $key 分組值的key * @return array */ function group_same_key($arr,$key){ $new_arr = array(); foreach($arr as $k=>$v ){ $new_arr[$v[$key]][] = $v; } return $new_arr; } /** * 獲取隨機字元串 * @param int $randLength 長度 * @param int $addtime 是否加入當前時間戳 * @param int $includenumber 是否包含數字 * @return string */ function get_rand_str($randLength=6,$addtime=1,$includenumber=0){ if ($includenumber){ $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQEST123456789'; }else { $chars='abcdefghijklmnopqrstuvwxyz'; } $len=strlen($chars); $randStr=''; for ($i=0;$i<$randLength;$i++){ $randStr.=$chars[rand(0,$len-1)]; } $tokenvalue=$randStr; if ($addtime){ $tokenvalue=$randStr.time(); } return $tokenvalue; } /** * CURL請求 * @param $url 請求url地址 * @param $method 請求方法 get post * @param null $postfields post數據數組 * @param array $headers 請求header信息 * @param bool|false $debug 調試開啟 預設false * @return mixed */ function httpRequest($url, $method, $postfields = null, $headers = array(), $debug = false) { $method = strtoupper($method); $ci = curl_init(); /* Curl settings */ curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /* 在發起連接前等待的時間,如果設置為0,則無限等待 */ curl_setopt($ci, CURLOPT_TIMEOUT, 7); /* 設置cURL允許執行的最長秒數 */ curl_setopt($ci, CURLOPT_RETURNTRANSFER, true); switch ($method) { case "POST": curl_setopt($ci, CURLOPT_POST, true); if (!empty($postfields)) { $tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields; curl_setopt($ci, CURLOPT_POSTFIELDS, $tmpdatastr); } break; default: curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method); /* //設置請求方式 */ break; } $ssl = preg_match('/^https:\/\//i',$url) ? TRUE : FALSE; curl_setopt($ci, CURLOPT_URL, $url); if($ssl){ curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書和hosts curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); // 不從證書中檢查SSL加密演算法是否存在 } //curl_setopt($ci, CURLOPT_HEADER, true); /*啟用時會將頭文件的信息作為數據流輸出*/ curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ci, CURLOPT_MAXREDIRS, 2);/*指定最多的HTTP重定向的數量,這個選項是和CURLOPT_FOLLOWLOCATION一起使用的*/ curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); curl_setopt($ci, CURLINFO_HEADER_OUT, true); /*curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * *COOKIE帶過去** */ $response = curl_exec($ci); $requestinfo = curl_getinfo($ci); $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); if ($debug) { echo "=====post data======\r\n"; var_dump($postfields); echo "=====info===== \r\n"; print_r($requestinfo); echo "=====response=====\r\n"; print_r($response); } curl_close($ci); return $response; //return array($http_code, $response,$requestinfo); } /** * 過濾數組元素前後空格 (支持多維數組) * @param $array 要過濾的數組 * @return array|string */ function trim_array_element($array){ if(!is_array($array)) return trim($array); return array_map('trim_array_element',$array); } /** * 檢查手機號碼格式 * @param $mobile 手機號碼 */ function check_mobile($mobile){ if(preg_match('/1[34578]\d{9}$/',$mobile)) return true; return false; } /** * 檢查郵箱地址格式 * @param $email 郵箱地址 */ function check_email($email){ if(filter_var($email,FILTER_VALIDATE_EMAIL)) return true; return false; } /** * 實現中文字串截取無亂碼的方法 */ function getSubstr($string, $start, $length) { if(mb_strlen($string,'utf-8')>$length){ $str = mb_substr($string, $start, $length,'utf-8'); return $str.'...'; }else{ return $string; } } /** * 判斷當前訪問的用戶是 PC端 還是 手機端 返回true 為手機端 false 為PC 端 * @return boolean */ /** * 是否移動端訪問訪問 * * @return bool */ function isMobile() { // 如果有HTTP_X_WAP_PROFILE則一定是移動設備 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) return true; // 如果via信息含有wap則一定是移動設備,部分服務商會屏蔽該信息 if (isset ($_SERVER['HTTP_VIA'])) { // 找不到為flase,否則為true return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false; } // 腦殘法,判斷手機發送的客戶端標誌,相容性有待提高 if (isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = array ('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'); // 從HTTP_USER_AGENT中查找手機瀏覽器的關鍵字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) return true; } // 協議法,因為有可能不准確,放到最後判斷 if (isset ($_SERVER['HTTP_ACCEPT'])) { // 如果只支持wml並且不支持html那一定是移動設備 // 如果支持wml和html但是wml在html之前則是移動設備 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) { return true; } } return false; } //php獲取中文字元拼音首字母 function getFirstCharter($str){ if(empty($str)) { return ''; } $fchar=ord($str{0}); if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{0}); $s1=iconv('UTF-8','gb2312',$str); $s2=iconv('gb2312','UTF-8',$s1); $s=$s2==$str?$s1:$str; $asc=ord($s{0})*256+ord($s{1})-65536; if($asc>=-20319&&$asc<=-20284) return 'A'; if($asc>=-20283&&$asc<=-19776) return 'B'; if($asc>=-19775&&$asc<=-19219) return 'C'; if($asc>=-19218&&$asc<=-18711) return 'D'; if($asc>=-18710&&$asc<=-18527) return 'E'; if($asc>=-18526&&$asc<=-18240) return 'F'; if($asc>=-18239&&$asc<=-17923) return 'G'; if($asc>=-17922&&$asc<=-17418) return 'H'; if($asc>=-17417&&$asc<=-16475) return 'J'; if($asc>=-16474&&$asc<=-16213) return 'K'; if($asc>=-16212&&$asc<=-15641) return 'L'; if($asc>=-15640&&$asc<=-15166) return 'M'; if($asc>=-15165&&$asc<=-14923) return 'N'; if($asc>=-14922&&$asc<=-14915) return 'O'; if($asc>=-14914&&$asc<=-14631) return 'P'; if($asc>=-14630&&$asc<=-14150) return 'Q'; if($asc>=-14149&&$asc<=-14091) return 'R'; if($asc>=-14090&&$asc<=-13319) return 'S'; if($asc>=-13318&&$asc<=-12839) return 'T'; if($asc>=-12838&&$asc<=-12557) return 'W'; if($asc>=-12556&&$asc<=-11848) return 'X'; if($asc>=-11847&&$asc<=-11056) return 'Y'; if($asc>=-11055&&$asc<=-10247) return 'Z'; return null; }