這篇文章的自定義函數,主要說一些數據轉換的,就不蝦扯蛋了,直接說正事,我後續會陸續寫一些PHP開發中實用的一些自定義函數,方便用到的朋友,可以快速開發和使用。php
在咱們請求一些第三方接口的時候,要麼返回給你json類型的數據格式,要麼就是xml或者其餘的,若是是json的話,很方便能直接使用,當遇到xml格式的時候,就須要轉換爲數組格式的,方便使用。html
/** * 將xml格式轉換爲數組 * @param string $xml xml字符串 * @return mixed */ function xml_to_array($xml = '') { // 利用函數simplexml_load_string()把xml字符串載入對象中 $obj = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); // 編碼對象後,再解碼便可獲得數組 $arr = json_decode(json_encode($obj), true); return $arr; }
一般,爲了安全和保護用戶隱私,用戶手機號等關鍵信息,是不能徹底暴露在界面上公開顯示的,就須要處理一下,好比一般是隱藏中間四位數……ajax
/** * 隱藏手機號中間四位數爲**** * @param string $mobile 正常手機號 * @return mixed */ function replace_phone($mobile = '') { $new_mobile = substr_replace($mobile, '****', 3, 4); return $new_mobile; }
這裏,我就最簡單的說明一下,通常API請求,最基礎要求返回的數據格式,一般呢,能夠細分爲成功返回和失敗返回,你們能夠根據實際狀況處理,在不少框架中,都有直接封裝好的方法,你們也能夠去看看框架裏是怎麼處理的。json
/** * 最簡單的Ajax請求返回數據格式 * @param string $msg 返回提示信息 * @param int $code 返回標識符號 * @param array $data 返回數據 */ function ajax_return($msg = '', $code = 0, $data = []) { $return['code'] = $code; $return['msg'] = $msg; $return['data'] = $data; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); }
一般,在一些列表或者固定範圍內,顯示必定長度的字符串的時候,若是咱們不控制範圍的話,極可能會致使超出界面顯示,或者溢出顯示,致使頁面佈局不美觀等,這個時候,就須要咱們控制顯示字符串的長度,超出部分截取掉……segmentfault
/** * 截取字符串,超出部分用省略符號顯示 * @param string $text 待截取字符串 * @param int $length 截取長度,默認所有截取 * @param string $rep 截取超出替換的字符串,默認爲省略號 * @return string */ function cut_string($text = '', $length = 0, $rep = '…') { if (!empty($length) && mb_strlen($text, 'utf8') > $length) { $text = mb_substr($text, 0, $length, 'utf8') . $rep; } return $text; }
在一些論壇或者交友類平臺中,常常會看到,某某年齡18歲,若是當你遇到這類開發需求的時候,是否是也得處理一下,我是個善良的開發者嘛,這種事情,我確定幫想到了,讓我來就好了,安排上,已經寫好了,能夠直接拿來用。數組
/** * 根據生日計算年齡 * @param string $date 生日的年月日 * @return int */ function get_age($date = '') { $age = 0; $time = strtotime($date); // 日期非法,則不處理 if (!$time) { return $age; } // 計算時間年月日差 $date = date('Y-m-d', $time); list($year, $month, $day) = explode("-", $date); $age = date("Y", time()) - $year; $diff_month = date("m") - $month; $diff_day = date("d") - $day; // 不滿週歲年齡減1 if ($age < 0 || $diff_month < 0 || $diff_day < 0) { $age--; } return $age; }
最多見的,咱們天天刷微信朋友圈的生活,左下角的那個時間,好比:10分鐘前、2小時前、昨天等,你是否也遇到過這類的時間顯示轉換的需求,這類開發需求找我啊,我都給安排好了,拿來即用的那種哦……安全
/** * 日期時間顯示格式轉換 * @param int $time 時間戳 * @return bool|string */ function transfer_show_time($time = 0) { // 時間顯示格式 $day_time = date("m-d H:i", $time); $hour_time = date("H:i", $time); // 時間差 $diff_time = time() - $time; $date = $day_time; if ($diff_time < 60) { $date = '剛剛'; } else if ($diff_time < 60 * 60) { $min = floor($diff_time / 60); $date = $min . '分鐘前'; } else if ($diff_time < 60 * 60 * 24) { $h = floor($diff_time / (60 * 60)); $date = $h . '小時前 ' . $hour_time; } else if ($diff_time < 60 * 60 * 24 * 3) { $day = floor($diff_time / (60 * 60 * 24)); if ($day == 1) { $date = '昨天 ' . $day_time; } else { $date = '前天 ' . $day_time; } } return $date; }
平常開發中,咱們通常都是經過time()
直接獲取時間戳秒數,不多會遇到獲取毫秒數的需求,可是呢,有備無患,萬一啥時候一個坑比需求有這個要求呢,那怎麼也得知足吧,做爲一個職業的開發者,通常都是有求必應的……微信
/** * 獲取毫秒數 * @return string */ function get_millisecond() { list($t1, $t2) = explode(' ', microtime()); $ms = sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000); return $ms; }
一般,咱們都會遇到須要請求第三方接口的,並且通常也都會封裝本身的接口請求方法,大同小異,這是最基礎的GET請求封裝框架
/** * CURL請求之GET方式 * @param string $url 請求接口地址 * @return bool|mixed */ function curl_get($url = '') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 不驗證SSL證書。 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $res = curl_exec($ch); curl_close($ch); return $res; }
不少第三方接口,通常都是POST方式的比較多,因此,我也給你們封裝了一個基礎的請求方法,你們能夠根據本身的實際狀況,進行修改和完善。curl
/** * CURL請求之POST方式 * @param string $url 請求接口地址 * @param array $data 請求參數 * @param int $timeout 超時時間 * @return mixed */ function curl_post($url = '', $data = [], $timeout = 3000) { $post_data = http_build_query($data, '', '&'); header("Content-type:text/html;charset=utf-8"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); return $res; }
我後續會慢慢更新其餘的實用函數,若是你們有其餘好玩的、好用的歡迎分享出來,你們一塊兒學習和交流。對了,若是有說的不對的或者錯誤的地方,請你們指出來,我會努力改進,謝謝。