zoukankan      html  css  js  c++  java
  • PHP实用的功能函数

     1 /**
     2  * 获取类/对象的方法列表
     3  *@param unknown $argument 类/对象
     4  *@param array|string $filter 过滤
     5  *@return array 类似:[]
     6  */
     7 
     8 function class_get_methods($argument, $filter = null){
     9 
    10     $filters = 0;
    11     if(!empty($filter)){
    12         if(is_string($filter)) $filter = explode(',',  preg_replace('/s+/', '', $filter));
    13         $option = array(
    14                 'static'=>ReflectionMethod::IS_STATIC,
    15                 'public'=>ReflectionMethod::IS_PUBLIC,
    16                 'protected'=>ReflectionMethod::IS_PROTECTED,
    17                 'private'=>ReflectionMethod::IS_PRIVATE,
    18                 'abstract'=>ReflectionMethod::IS_ABSTRACT,
    19                 'final'=>ReflectionMethod::IS_FINAL,
    20         );
    21 
    22         foreach($filter as $value){
    23             $filters = $filters | $options[$value];
    24         }
    25     }
    26 
    27     $class = new ReflectionClass($argument);
    28     $ReflectionMethods = empty($filters)? $class->getMethods() : $class->getMethods($filters);
    29     $methods = [];
    30     foreach($ReflectionMethods as $ReflectionMethod){
    31 
    32         $function =  new ReflectionMethod($ReflectionMethod->class, $ReflectionMethod->name);
    33         //取得参数列表
    34         $parameters = $function->getParameters();
    35         foreach($parameters as $parameter){
    36             $aaa[$ReflectionMethod->name][] = '$'.$parameter->name;
    37         }
    38         if(isset($aaa[$ReflectionMethod->name]))
    39             $methods[] = $ReflectionMethod->name . '('. implode(', ', $aaa[$ReflectionMethod->name]) .' )';
    40             else
    41                 $methods[] = $ReflectionMethod->name . '()';
    42     }
    43     return $methods;
    44 
    45 }

    来源:当初学phalcon框架时,没有php源码,不知道对象有哪些方法,及使用时传递什么参数.

    示例:p(class_get_methods('Exception'));

     1 /**
     2  * 计算薪资范围属于哪些区间
     3  *@param string $range 范围
     4  *@param array|string $intervals 区间
     5  *@return NULL|array 匹配的区间
     6  */
     7 function interval($range, $intervals){
     8     
     9     if(is_string($intervals)) $intervals = [$intervals];
    10 
    11     $range = explode('-', $range);
    12     $result = null;
    13     foreach($intervals as $key => $value){
    14         
    15         $interval = explode('-', $value);
    16         if($interval[0] < $range[0] && $range[0] <= $interval[1]){
    17             $result[] = $value;
    18         }else if($range[0] < $interval[0] &&  $interval[0] < $range[1]){
    19             $result[] = $value;
    20         }
    21         
    22     }
    23     
    24     return $result;
    25     
    26 }

    来源:在招聘网站上通过薪资范围进行筛选时,发现并不准确,感觉这确实是个算法问题于是,自己实现了一下.

    示例:

    $range = '6-23';
    $intervals = ['3-5', '5-10', '10-15', '15-20', '20-25', '25-30' ];
    p('范围:' . $range, '区间:', $intervals, '结果:', interval($range, $intervals));

     1 /**
     2  * 打印数据
     3  * $args 参数列表
     4  */
     5 function p($args = ''){
     6 
     7     $args = func_get_args();
     8     $count = func_num_args();
     9     if($count == 0) $args = ['#----mark here----#'];
    10     
    11     if(in_array($args, ['@post',  '@get'])) {
    12         if($args == '@post') $args = $_POST;
    13         if($args == '@get') $args = $_GET;
    14     }
    15     
    16     $ajax = (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false;
    17     if(!$ajax) echo '<pre style="background:#efefef;padding:5px 0 0 5px;border: 1px solid #aaa;">';
    18     foreach($args as $key => $data){
    19         if (is_bool($data)) {
    20             $data = $data? '#true' : '#false';
    21         }elseif(empty($data)){
    22             if(is_null($data)) $data = '#null';
    23             if($data === '') $data = '#empty';
    24         }
    25         if($data instanceof Exception){
    26             $data = ['Class'=>get_class($data),  'Message' => $data->getMessage() . ' (' .$data->getCode() .')', 'File'=>$data->getFile() . ' (' .$data->getLine() .')'];
    27         }
    28 
    29         if($ajax){
    30             echo "
    "; print_r($data); echo "
    ";
    31         }else{
    32             print_r($data);
    33             if($key != $count - 1) echo '<hr/>';
    34         }
    35     }
    36     if(!$ajax) echo '</pre><br/>';
    37 }

    来源:p函数是自己写的代替print_r的.

    示例:上面也看到了它如此好用.

     1 /**
     2  * 读取sql标准的文件
     3  *@param string $file 文件
     4  *@param boolean $toarray 是否返回数组
     5  *@return string|array
     6  */
     7 function getSql($file, $toarray = false){
     8 
     9     $content = preg_replace(['/[
    |
    ]+s?(((--s+|#).*)|/*(.|
    )**/)/', '/[
    |
    ]+/'], '', file_get_contents($file));
    10     if($toarray) $content = array_filter(explode(';', $content));
    11     return $content;
    12 }

    来源:项目开发时,会初始化一些表数据,每次都手动添加或修改,很麻烦.于是想到把处理好的表数据导出为sql文件,每次代码测试时,都把表数据初始化一遍.

     1 /**
     2  * 发送HTTP请求方法
     3  * @param  string $url  请求URL
     4  * @param  array  $data 发送数据
     5  * @param  string $method 请求方法
     6  */
     7 function curl($url, $data=[], $method='get', $options=[]){
     8 
     9     $options += array(CURLOPT_URL=>$url, CURLOPT_TIMEOUT=>30, CURLOPT_RETURNTRANSFER=>true, CURLOPT_SSL_VERIFYPEER=>false);
    10     if(!empty($data)) $options[CURLOPT_POSTFIELDS] = $data;
    11     $options[CURLOPT_CUSTOMREQUEST] = strtoupper($method);
    12 
    13     $ch = curl_init();
    14     curl_setopt_array($ch, $options);
    15     $data = curl_exec($ch);
    16     $error = curl_error($ch);
    17     curl_close($ch);
    18     return $error? false : $data;
    19 
    20 }
    /**
     * 文本文件转数组:
     * 文件内容:
     北京   111
     天津   222
     * @param unknown $content 文件路径或文本内容
     * @return multitype:
     */
    function text2array($content){
        
        if(is_file($content)) $content = file_get_contents($content);
        $content = array_filter(explode("
    ", trim($content)));
        foreach($content as $value){
            $data[] = array_values(array_filter(explode(' ', $value)));
        }
        return $data;
    }
  • 相关阅读:
    PAT Advanced 1138 Postorder Traversal (25) [树的遍历,前序中序转后序]
    PAT Advanced 1127 ZigZagging on a Tree (30) [中序后序建树,层序遍历]
    PAT Advanced 1020 Tree Traversals (25) [⼆叉树的遍历,后序中序转层序]
    PAT Basic 1075 链表元素分类(25) [链表]
    PAT A1133 Splitting A Linked List (25) [链表]
    PAT Advanced 1097 Deduplication on a Linked List (25) [链表]
    PAT Basic 反转链表 (25) [链表]
    PAT Advanced 1074 Reversing Linked List (25) [链表]
    PAT Advanced 1052 Linked List Sorting (25) [链表]
    PAT Advanced 1032 Sharing(25) [链表]
  • 原文地址:https://www.cnblogs.com/zbseoag/p/6101631.html
Copyright © 2011-2022 走看看