【二】PHP實用自定義函數-轉換篇

前言

這篇文章的自定義函數,主要說一些數據轉換的,就不蝦扯蛋了,直接說正事,我後續會陸續寫一些PHP開發中實用的一些自定義函數,方便用到的朋友,可以快速開發和使用。php

將xml格式轉換爲數組

在咱們請求一些第三方接口的時候,要麼返回給你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請求通用返回數據格式

這裏,我就最簡單的說明一下,通常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;
}

CURL請求之GET方式

一般,咱們都會遇到須要請求第三方接口的,並且通常也都會封裝本身的接口請求方法,大同小異,這是最基礎的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;
}

CURL請求之POST方式

不少第三方接口,通常都是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;
}

最後

我後續會慢慢更新其餘的實用函數,若是你們有其餘好玩的、好用的歡迎分享出來,你們一塊兒學習和交流。對了,若是有說的不對的或者錯誤的地方,請你們指出來,我會努力改進,謝謝。

相關文章
相關標籤/搜索