封装记录使用过方法

数组分组 按一个key值分组 二维数组

/**
 * 数组分组 按一个key值分组 二维数组
 * @param $arr 分组的数组
 * @param $key 分组的key值
 * @return array
 */
function array_group_by($arr, $key)
{
    $grouped = [];
    foreach ($arr as $value) {
        $grouped[$value[$key]][] = $value;
    }
    if (func_num_args() > 2) {
        $args = func_get_args();
        foreach ($grouped as $key => $value) {
            $params = array_merge([$value], array_slice($args, 2, func_num_args()));
            $grouped[$key] = call_user_func_array('array_group_by', $params);
        }
    }
    return $grouped;
}

无限递归分类树

/**
 * 无限递归分类树
 * @request  post
 * @param $data 数组数据
 * @param $pId 初始 父id
 * @return array|string
 */
function _getTree($data, $pId = 0)
{
    $tree = '';
    foreach ($data as $k => $v) {
        if ($v['pid'] == $pId) {        //父亲找到儿子
            $v['children'] = $this->_getTree($data, $v['id']);
            if ($v['children'] == "") {
                unset($v['children']);
            }
            $tree[] = $v;
        }
    }
    return $tree;
}

数组去除空值

/**
 * 数组去除空值
 * @param $arr
 * @param bool $trim
 * @return string
 */
function array_remove_empty(&$arr, $trim = true)
{
    if (!is_array($arr)) return false;
    foreach ($arr as $key => $value) {
        if (is_array($value)) {
            self::array_remove_empty($arr[$key]);
        } else {
            $value = ($trim == true) ? trim($value) : $value;
            if ($value == "") {
                unset($arr[$key]);
            } else {
                $arr[$key] = $value;
            }
        }
    }
}

约瑟夫游戏

/**
 * 约瑟夫游戏
 * @param $arr 游戏总人数
 * @param $number 淘汰的数字
 * @param $i 开始数字
 * @param $unset_number 淘汰人数
 * @param array $arr_unset 淘汰的人集合
 * @return array 返回淘汰人数
 */
function _josephGame($arr,$number,$i,$unset_number,$arr_unset = [])
{
    //$n 记录当前循环次数
    $n = 0;
    //$arr_count 当前还在游戏内的人数
    $arr_count = count($arr);
    foreach ($arr as $k => $v){
        //循环次数 +1
        $n++;
        // 判断是否数到了需要淘汰的数字(默认数字9)
        if($i == $number){
            //统计淘汰的人
            $arr_unset[] = $arr[$k];
            //删除淘汰的人
            unset($arr[$k]);
            //判断是否达到了淘汰人数(默认15人)
            if(count($arr_unset) >= $unset_number)  break;
            //数字到9了之后 重新开始计数
            $i = 0;
        }
        //数字默认 +1
        $i++;
        //判断是否已经已经走完了一轮 走完了重新开始
        if($arr_count == $n) $this->_josephGame($arr,$number,$i,$unset_number,$arr_unset);
    }
    return  $arr_unset;
}

秒数转换时间

/**
 * 秒数转换时间
 * @param $seconds 秒数
 * @return string 时间
 */
function changeTimeType($seconds){
    if ($seconds>3600){
        $hours = intval($seconds/3600);
        $time = $hours."时".gmstrftime('%M', $seconds).'分'.gmstrftime('%S', $seconds).'秒';
    }else{
        $time = gmstrftime('%H', $seconds).'时'.gmstrftime('%M', $seconds).'分'.gmstrftime('%S', $seconds).'秒';
    }
    return $time;
}

curl模拟请求数据

/**
 * @param $url 请求地址
 * @param array $data 请求数据
 * @param bool $post 是否为post
 * @param bool $https 是否为https请求
 * @return bool|string 返回请求数据
 */
function http_curl($url, $data = [], $post = false, $https = true )
{
    //创建一个新CURL资源 返回一个CURL句柄,出错返回 FALSE。
    $curl = curl_init();
    //构造来源
    curl_setopt($curl, CURLOPT_REFERER, $_SERVER['HTTP_HOST']);
    //模拟用户使用的浏览器
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    //在发起连接前等待的时间,如果设置为0,则无限等待。
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 300);
    //设置CURL允许执行的最长秒数
    curl_setopt($curl, CURLOPT_TIMEOUT, 300);
    //获取的信息以文件流的形式返回,而不是直接输出。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    //设置为https请求,不验证证书和hosts
    if ($https) {
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    }
    //用来设置HTTP头字段的数组
    $header[] = 'ContentType:application/json;charset=UTF-8';
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    //设置请求地址
    curl_setopt($curl, CURLOPT_URL, $url);
    if($post){
        //发送POST请求
        curl_setopt($curl, CURLOPT_POST, true);
        //发送的POST数据
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }

    //启用时追踪句柄的请求字符串
    curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE);
    //执行CURL
    $result = curl_exec($curl);
    //检查是否有错误发生
    if (curl_errno($curl)) {
        //返回最后一次的错误号
        return curl_error($curl);
    }
    //关闭CURL 并且释放系统资源
    curl_close($curl);
    return $result;
}

将返回数据格式都变为字符串

/**
 * 将返回数据格式都变为字符串
 * @param $arr
 * @return array
 */
function attrToString($arr)
{
    if (!is_array($arr) || empty($arr)) return $arr;
    foreach ($arr as $k=>$v){
        if(is_array($v) && !empty($v) ){
            $arr[$k]  = attrToString($v);
        }else{
            $arr[$k] = is_numeric($v) ?  (string)$v : $v;
        }
    }
    return $arr;
}

去除数组数据中的左右空格

/**
 * 去除数组数据中的左右空格
 * @param $param
 * @return array
 */
function paramToTrim($param)
{
    if (!is_array($param)) return trim($param);
    foreach ($param as $k=>$v){
        if(is_array($v)){
            $param[$k]  = paramToTrim($v);
        }else{
            $param[$k] = trim($v);
        }
    }
    return $param;
}

生成订单号(不隐藏生成时间)

/**
 * 生成订单号(不隐藏生成时间)
 */
function generate_order_number_also(){
    return
        date('YmdHis') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
}

生成订单号(隐藏生成时间)

/**
 * 生成订单号(隐藏生成时间)
 */
function generate_order_number(){
    list($millisecond, $date) = explode(' ', microtime());
    $time = (float)sprintf('%.0f', (floatval($millisecond) + floatval($date)) * 1000);
    $order_code = strtoupper(substr(md5($time), 8, 16)) . str_pad(mt_rand(1, 99), 2, '0', STR_PAD_LEFT);
    return $order_code;
}

前后端分离返回数据(解决跨域)

/**
 * 前后端分离返回数据
 * @param $code 状态码
 * @param $msg  提示信息
 * @param array $data  返回数据
 */
function _ajaxReturn($code, $msg, $data=array())
{
    $data = is_null($data) ? array() : $data;
    $data = array(
        "code" => (int)$code,
        "msg" => $msg,
        "data" => $data
    );
    header('Cache-Control:no-cache,must-revalidate');
    header('Pragma:no-cache');
    header('Content-Type:application/json; charset=utf-8');
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Headers:x-requested-with,content-type");
    exit(json_encode($data));
}

检验时间是否为有效时间

  /**
     * 验证日期是否有效
     * @param $date
     * @return bool|false|string
     */
    public static function checkDateIsValid($date)
    {
        if ( !preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/" , $date , $parts)) {
            return false;
        } else {
            //检测是否为日期
            if (checkdate($parts[2] , $parts[3] , $parts[1])) {
                $isDate = strtotime($date) ? strtotime($date) : false;

                if ($isDate === false) {
                    return false;
                } else {
                    return date('Y-m-d' , $isDate);
                }
            } else {
                return false;
            }
        }
    }

去除昵称中的表情(可配合去重空格使用)

/**
 * 去除昵称中的表情
 * @param $str 字符串
 * */
function filter_emoji($str)
{
    $str = preg_replace_callback(    //执行一个正则表达式搜索并且使用一个回调进行替换
        '/./u' ,
        function (array $match) {
            return strlen($match[0]) >= 4 ? '' : $match[0];
        } ,
        $str);

    return $str;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值