這篇文章的自定義函數,主要說一些數據轉換的,就不蝦扯蛋了,直接說正事,我後續會陸續寫一些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));
}
複製代碼
一般,在一些列表或者固定範圍內,顯示必定長度的字符串的時候,若是咱們不控制範圍的話,極可能會致使超出界面顯示,或者溢出顯示,致使頁面佈局不美觀等,這個時候,就須要咱們控制顯示字符串的長度,超出部分截取掉……數組
/** * 截取字符串,超出部分用省略符號顯示 * @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
/** * 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請求之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;
}
複製代碼
我後續會慢慢更新其餘的實用函數,若是你們有其餘好玩的、好用的歡迎分享出來,你們一塊兒學習和交流。對了,若是有說的不對的或者錯誤的地方,請你們指出來,我會努力改進,謝謝。