1. 自动加载:
    /*
    * @desc:自动加载带命名空间的类的函数
    * @param $dir 需要注册自动加载的文件夹
    * @param $namespace 文件夹对应的命名空间
    */
    function autoloader($dir,$namespace){
     spl_autoload_register(function($name) use ($dir,$namespace){
         $name = str_replace('\\',DIRECTORY_SEPARATOR,$name);
         $namespace = str_replace('\\',DIRECTORY_SEPARATOR,$namespace);
         $name = str_replace($namespace.DIRECTORY_SEPARATOR,'',$name);
         require $dir.DIRECTORY_SEPARATOR.$name.'.php';
     });
    }
  2. 无限级分类:
    1. 树形分类:
      /*
      * 生成树形结构
      * @param $array 分类数据
      * @param $pid 父级id
      * @param $son 子级分类名
      * @return $list 整理好分类的数组
      */
      function getTree($array,$id = 'id',$pid = 'pid',$son = 'children'){
      $list = array(); //格式化的树
      $tmpMap = array(); //临时扁平数据
      foreach ($array as $item) {
       $tmpMap[$item[$id]] = $item;
      }
      foreach ($array as $item) {
       if (isset($tmpMap[$item[$pid]])) {
           $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]];
       } else {
           $list[] = &$tmpMap[$item[$id]];
       }
      }
      unset($tmpMap);
      return $list;
      }
    2. 层级分类:
      /*
      * 递归实现无限极分类
      * @param $array 分类数据
      * @param $pid 父级id
      * @param $level 分类级别,用来显示格式用的
      * @return $list 整理好分类的数组
      */
      function getLevel($array, $pid = 0, $level = 0){
      // 声明静态数组,避免递归调用时,多次声明导致数组覆盖
      static $list = [];
      foreach ($array as $key => $value) {
       if ($value['pid'] == $pid) {
           $value['level'] = $level;
           $list[]         = $value;
           unset($array[$key]);
           getLevel($array, $value['id'], $level + 1);
       }
      }
      return $list;
      }
  3. 全局错误处理:
    set_error_handler(function($level,$msg,$file,$line){
     if($level < 8){
         $arr = array(
             "错误等级:" => $level,
             "错误信息:" => $msg,
             "出错文件:" => $file,
             "出错行数:" => $line
         );
         var_dump($arr);
     }
    });
    set_exception_handler(function($e){
     $msg = $e->getMessage();
     $file = $e->getFile();
     $line = $e->getLine();
     $arr = array(
         '异常信息:' => $msg,
         '异常文件:' => $file,
         '异常行数:' => $line
     );
     var_dump($arr);
    });
  4. http 请求函数:
    1. GET 请求:
      /*
      * http GET 请求
      * @param url 请求地址
      * @return ret 响应文本
      */
      function http_get($url){
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_URL, $url);
      $ret = curl_exec($curl);
      curl_close($curl);
      return $ret;
      }
    2. POST 请求(可上传文件):
      /*
      * http POST 请求(可上传文件)
      * @param url 请求地址
      * @param data array 请求参数
      * @param filekey(可选) 上传文件的 key
      * @param path(可选) 待上传文件的本地路径
      * @return ret 响应文本
      */
      function http_post($url,$data,$filekey = '',$path = ''){
      if($filekey){
       $data[$filekey] = new CURLFile($path);
      }
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true );
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_HEADER, false);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
      $ret = curl_exec($curl);
      curl_close($curl);
      return $ret;
      }
    3. JSON/XML 请求:
      /*
      * http JSON/XML 请求
      * @param url 请求地址
      * @param data array 请求参数
      * @return ret 响应文本
      */
      function http_json($url,$data){
      $json = json_encode($data);
      $curl = curl_init($url);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_HTTPHEADER, [
           'Content-Type: application/json',
           'Content-Length: ' . strlen($json)
       ]
      );
      $ret = curl_exec($curl);
      curl_close($curl);
      return $ret;
      }
  5. 过滤空格(包含中文空格):
    preg_replace('/[(\xc2\xa0)|\s]+/','', $str);
  6. date 格式化选项:
时间单位 字符 返回示例 说明
Y 1999 或 2003 4 位数字完整表示的年份
y 99 或 03 2 位数字表示的年份
- - - -
m 01 到 12 数字表示的月份,有前导零
n 1 到 12 数字表示的月份,没有前导零
t 28 到 31 当前月份总共有多少天
- - - -
d 01 到 31 月份中的第几天,有前导零的 2 位数字
j 1 到 31 月份中的第几天,没有前导零
z 0 到 365 年份中的第几天
- - - -
N 1(星期一)到 7(星期天) 当前星期几
w 0(星期天)到 6(星期六) 当前星期几
W 42(当年的第 42 周) 年份中的第几周(从周一开始计算)
- - - -
H 00 到 23 24 小时制,有前导零
G 0 到 23 24 小时制,没有前导零
h 01 到 12 12 小时制,有前导零
g 1 到 12 12 小时制,没有前导零
- - - -
i 00 到 59 有前导零的分钟数
- - - -
s 00 到 59 有前导零的秒数
- - - -
时区 Z -43200 到 43200 时差偏移量的秒数,如中国的 UTC+8,表示:8 * 3600 = 28800
文档更新时间: 2020-11-22 20:37   作者:lee