当前位置 : 主页 > 网络编程 > PHP >

公共函数类

来源:互联网 收集:自由互联 发布时间:2021-06-28
gistfile1.txt $data) { $refer[$data[$pk]] = $list[$key]; } foreach ($list as $key = $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] = $list[$key]; } else if(isset($refer[$parentId])){ is_objec
gistfile1.txt
  $data) {

        $refer[$data[$pk]] =& $list[$key];
    }

    foreach ($list as $key => $data) {

        // 判断是否存在parent

        $parentId =  $data[$pid];



        if ($root == $parentId) {

            $tree[] =& $list[$key];

        } else if(isset($refer[$parentId])){

            is_object($refer[$parentId]) && $refer[$parentId] = $refer[$parentId]->toArray();
            
            $parent =& $refer[$parentId];

            $parent[$child][] =& $list[$key];
        }
    }
    
    return $tree;
}

/**

 * 分析数组及枚举类型配置值 格式 a:名称1,b:名称2

 * @return array

 */
function parse_config_attr($string)
{
    
    $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
    
    if (strpos($string, ':')) {
        
        $value = [];
        
        foreach ($array as $val) {
            
            list($k, $v) = explode(':', $val);
            
            $value[$k] = $v;
        }
        
    } else {
        
        $value = $array;
    }
    
    return $value;
}

/**

 * 解析数组配置

 */
function parse_config_array($name = '')
{
    
    return parse_config_attr(config($name));
}

/**

 * 获取单例对象

 */
function get_sington_object($object_name = '', $class = null)
{

    $request = \think\Request::instance();
    
    $request->__isset($object_name) ?: $request->bind($object_name, new $class());
    
    return $request->__get($object_name);
}

/**

 * 将二维数组数组按某个键提取出来组成新的索引数组

 */
function array_extract($array = [], $key = 'id')
{
    
    $count = count($array);
    
    $new_arr = [];
     
    for($i = 0; $i < $count; $i++) {
        
        if (!empty($array) && !empty($array[$i][$key])) {
            
            $new_arr[] = $array[$i][$key];
        }
    }
    
    return $new_arr;
}

/**

 * 根据某个字段获取关联数组

 */
function array_extract_map($array = [], $key = 'id'){
    
    
    $count = count($array);
    
    $new_arr = [];
     
    for($i = 0; $i < $count; $i++) {
        
        $new_arr[$array[$i][$key]] = $array[$i];
    }
    
    return $new_arr;
}

/**

 * 字符串转换为数组,主要用于把分隔符调整到第二个参数

 * @param  string $str  要分割的字符串

 * @param  string $glue 分割符

 * @return array

 */
function str2arr($str, $glue = ',')
{
    
    return explode($glue, $str);
}

/**

 * 数组转换为字符串,主要用于把分隔符调整到第二个参数

 * @param  array  $arr  要连接的数组

 * @param  string $glue 分割符

 * @return string

 */
function arr2str($arr, $glue = ',')
{
    
    return implode($glue, $arr);
}

/**

 * 获取目录下所有文件

 */
function file_list($path = '')
{
    
    $file = scandir($path);
    
    foreach ($file as $k => $v) {
        
        if (is_dir($path . SYS_DS_PROS . $v)) : unset($file[$k]); endif;
    }
    
    return array_values($file);
}

/**

 * 获取插件类的类名

 * @param strng $name 插件名

 */
function get_addon_class($name = '')
{
    
    $lower_name = strtolower($name);
    
    $class = SYS_ADDON_DIR_NAME. SYS_DS_CONS . $lower_name . SYS_DS_CONS . $name;
    
    return $class;
}

/**

 * 钩子

 */
function hook($tag = '', $params = [])
{
    
    \think\Hook::listen($tag, $params);
}

/**

 * 保存文件

 */
function sf($arr = [], $fpath = 'D:\test.php')
{
    
    $data = "
 ";
    
    file_put_contents($fpath, $data);
}

/**

 * 插件显示内容里生成访问插件的url

 * @param string $url url

 * @param array $param 参数

 * @author 麦当苗儿 
 
  

 */
function addons_url($url, $param = array())
{

    $parse_url  =  parse_url($url);
    $addons     =  $parse_url['scheme'];
    $controller =  $parse_url['host'];
    $action     =  $parse_url['path'];

    /* 基础参数 */
    $params_array = array(
        'addon_name'      => $addons,
        'controller_name' => $controller,
        'action_name'     => substr($action, 1),
    );

    $params = array_merge($params_array, $param); //添加额外参数
    
    return url('addon/execute', $params);
}

/**

 * 字符串命名风格转换

 * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格

 * @param string $name 字符串

 * @param integer $type 转换类型

 * @return string

 */
function parse_name($name, $type=0)
{
    
    if ($type) {
        
        return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function($match){return strtoupper($match[1]);}, $name));
    } else {
        
        return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
    }
}

/**

 * 获取目录列表

 */
function get_dir($dir_name)
{
    
    $dir_array = [];
    
    if (false != ($handle = opendir($dir_name))) {
        
        $i = 0;
        
        while (false !== ($file = readdir($handle))) {
            
            if ($file != "." && $file != ".."&&!strpos($file,".")) {
                
                $dir_array[$i] = $file;
                
                $i++;
            }
        }
        
        closedir($handle);
    }
    
    return $dir_array;
}

/**

 * 获取缓存标签

 */
function get_cache_tag($name, $join = null)
{
    
    $table_string = strtolower($name);
    
    if (!empty($join)) {
        
        foreach ($join as $v) {
            
            $names = explode(' ', $v[0]);
            
            $table_name = str_replace('_', '', str_replace(SYS_DB_PREFIX, '', $names[0]));
            
            $table_string .= strtolower($table_name);
        }
    }
    
    $auto_cache_info = cache(AUTO_CACHE_KEY);
    
    empty($auto_cache_info[CACHE_TABLE_KEY][$table_string]) && $auto_cache_info[CACHE_TABLE_KEY][$table_string][CACHE_VERSION_KEY] = DATA_DISABLE;
    
    $auto_cache_info[CACHE_TABLE_KEY][$table_string][CACHE_LAST_GET_TIME_KEY] = TIME_NOW;
    
    cache(AUTO_CACHE_KEY, $auto_cache_info, DATA_DISABLE);
    
    return $table_string;
}

/**

 * 获取缓存key

 */
function get_cache_key($name, $where, $field, $order, $paginate, $join, $group, $limit, $data, $cache_tag)
{
    
    $auto_cache_info = cache(AUTO_CACHE_KEY);
    
    $version = '';
    
    if (!empty($join)) {
        
        foreach ($join as $v) {
            
            $names = explode(' ', $v[0]);
            
            $table_name = strtolower(str_replace('_', '', str_replace(SYS_DB_PREFIX, '', $names[0])));
            
            $version .= $auto_cache_info[CACHE_TABLE_KEY][$table_name][CACHE_VERSION_KEY];
        }
    } else {
        
        $version .= $auto_cache_info[CACHE_TABLE_KEY][strtolower($name)][CACHE_VERSION_KEY];
    }
    
    $param = request()->param();
    
    $key = md5(serialize(compact('name', 'where', 'field', 'order', 'paginate', 'join', 'group', 'limit', 'data', 'param', 'version')));
    
    $auto_cache = check_cache_key($key, $auto_cache_info, $cache_tag);
    
    cache(AUTO_CACHE_KEY, $auto_cache, DATA_DISABLE);
    
    return $key;
}

/**

 * 检查缓存key

 */
function check_cache_key($key = null, $auto_cache_info = null, $cache_tag = null)
{
    
    if (count($auto_cache_info[CACHE_CACHE_KEY]) >= $auto_cache_info[CACHE_MAX_NUMBER_KEY]) {
        
        unset($auto_cache_info[CACHE_CACHE_KEY][DATA_DISABLE]);
        
        $auto_cache_info[CACHE_CACHE_KEY] = array_values($auto_cache_info[CACHE_CACHE_KEY]);
    }
    
    if (!in_array($key, $auto_cache_info[CACHE_CACHE_KEY])) {
        
        $auto_cache_info[CACHE_CACHE_KEY][] = $key;
        
        isset($auto_cache_info[CACHE_TABLE_KEY][$cache_tag][CACHE_NUMBER_KEY]) ? $auto_cache_info[CACHE_TABLE_KEY][$cache_tag][CACHE_NUMBER_KEY]++ : $auto_cache_info[CACHE_TABLE_KEY][$cache_tag][CACHE_NUMBER_KEY] = DATA_NORMAL;
        isset($auto_cache_info[CACHE_NUMBER_KEY]) ? $auto_cache_info[CACHE_NUMBER_KEY]++ : $auto_cache_info[CACHE_NUMBER_KEY] = DATA_NORMAL;
    }
    
    return $auto_cache_info;
}

/**

 * 设置缓存版本

 */
function set_cache_version($name = '')
{
    $auto_cache_info = cache(AUTO_CACHE_KEY);
    
    $strtolower_name = strtolower($name);
            
    ++$auto_cache_info[CACHE_TABLE_KEY][$strtolower_name][CACHE_VERSION_KEY];
    
    cache(AUTO_CACHE_KEY, $auto_cache_info, DATA_DISABLE);
}

/**

 * 设置缓存统计数量

 */
function set_cache_statistics_number($key = '')
{
    $auto_cache_info = cache(AUTO_CACHE_KEY);
    
    !empty($key) && ++$auto_cache_info[$key];
    
    cache(AUTO_CACHE_KEY, $auto_cache_info, DATA_DISABLE);
}

/**

 * 获取图片url

 */
function get_picture_url($id = 0)
{
    
    $info = model('Picture')->where(['id' => $id])->field('path,url')->find();

    if (!empty($info['url']))  : return config('static_domain') . SYS_DS_PROS . $info['url'];  endif;

    if (!empty($info['path'])) : return '/upload/picture/'.$info['path'];  endif;

    return '/static/admin/img/onimg.png';
}

/**

 * 获取文件url

 */
function get_file_url($id = 0)
{
    
    $info = model('File')->where(['id' => $id])->field('path,url')->find();

    if (!empty($info['url']))  : return config('static_domain') . SYS_DS_PROS . $info['url'];  endif;

    if (!empty($info['path'])) : return '/upload/file/'.$info['path'];  endif;

    return '暂无文件';
}

/**

 * 导出excel信息

 * @param string  $titles    导出的表格标题

 * @param string  $keys      需要导出的键名

 * @param array   $data      需要导出的数据

 * @param string  $file_name 导出的文件名称

 */
function export_excel($titles = '', $keys = '', $data = [], $file_name = '导出文件' )
{
    
    $objPHPExcel = get_excel_obj($file_name);
        
    $y = 1;
    $s = 0;

    $titles_arr = str2arr($titles);

    foreach ($titles_arr as $k => $v) : $objPHPExcel->setActiveSheetIndex($s)->setCellValue(string_from_column_index($k). $y, $v); endforeach;

    $keys_arr = str2arr($keys);

    foreach ($data as $k => $v)
    {

        is_object($v) && $v = $v->toArray();
        
        foreach ($v as $kk => $vv)
        {
            
            $num = array_search($kk, $keys_arr);
            
            false !== $num && $objPHPExcel->setActiveSheetIndex($s)->setCellValue(string_from_column_index($num) . ($y + $k + 1), $vv );
        }
    }

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    
    $objWriter->save('php://output'); exit;
}



/**

 * 获取excel

 */
function get_excel_obj($file_name = '导出文件')
{
    
    set_time_limit(0);

    vendor('phpoffice/phpexcel/Classes/PHPExcel');

    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
    header("Content-Type:application/force-download");
    header("Content-Type:application/vnd.ms-execl");
    header("Content-Type:application/octet-stream");
    header("Content-Type:application/download");
    header('Content-Disposition:attachment;filename='.iconv("utf-8", "gb2312", $file_name).'.xlsx');
    header("Content-Transfer-Encoding:binary");
    
    return new PHPExcel();
}

/**

 * 数字转字母

 */
function  string_from_column_index($pColumnIndex = 0)
{
    static $_indexCache = [];
    
    if(!isset($_indexCache[$pColumnIndex]))
    {
        
        if($pColumnIndex < 26){
            
            $_indexCache[$pColumnIndex] = chr(65 + $pColumnIndex);
        }elseif($pColumnIndex < 702){
            
            $_indexCache[$pColumnIndex] = chr(64 + ($pColumnIndex / 26)).chr(65 + $pColumnIndex % 26);
        }else{
            
            $_indexCache[$pColumnIndex] = chr(64 + (($pColumnIndex - 26) / 676 )).chr(65 + ((($pColumnIndex - 26) % 676) / 26 )).  chr( 65 + $pColumnIndex % 26);
        }
    }
    
    return $_indexCache[$pColumnIndex];
}

/**

 * 页面数组提交后格式转换 

 */
function transform_array($array)
{

    $new_array = array();
    $key_array = array();

    foreach ($array as $key=>$val) {

        $key_array[] = $key;
    }

    $key_count = count($key_array);

    foreach ($array[$key_array[0]] as $i => $val) {
        
        $temp_array = array();

        for( $j=0;$j<$key_count;$j++ ){

            $key = $key_array[$j];
            $temp_array[$key] = $array[$key][$i];
        }

        $new_array[] = $temp_array;
    }

    return $new_array;
}

/**

 * 页面数组转换后的数组转json

 */
function transform_array_to_json($array)
{
    
    return json_encode(transform_array($array));
}

/**

 * 关联数组转索引数组

 */
function relevance_arr_to_index_arr($array)
{
    
    $new_array = [];
    
    foreach ($array as $v)
    {
        
        $temp_array = [];
        
        foreach ($v as $vv)
        {
            $temp_array[] = $vv;
        }
        
        $new_array[] = $temp_array;
    }
    
    return $new_array;
}

/**

 * 获取页面范围

 */
function get_page_number_scope($current_page = 0, $last_page = 0, $offset = 3, $page_number = 7)
{
    
    $init = DATA_SUCCESS;

    $max = $last_page;

    if($last_page > $page_number)
    {
        if($current_page <= $offset){

            $max    = $page_number;
        }else if($current_page + $offset >= $last_page){

            $init   = $last_page - $page_number + $init;
            $max    = $last_page;
        } else {

            $init   = $current_page - $offset;
            $max    = $current_page + $offset;
        }
    }
    
    return ['init' => $init, 'max' => $max];
}

/**

 * 获取分页HTML

 */
function get_page_html($current_page = 0, $last_page = 0, $offset = 3, $page_number = 7)
{
    
    $data = get_page_number_scope($current_page, $last_page, $offset, $page_number);

    $spans  = '';

    for($i = $data['init']; $i <= $data['max']; $i++) :  $spans .= $i == $current_page ? "
  ".$i."" : "
  $i"; endfor;

    $next   = '';
    $current_page_next = $current_page + DATA_SUCCESS;

    if ($current_page < $last_page) : $next =  "
  下一页"; endif;

    $prev = '';
    $current_page_prev = $current_page - DATA_SUCCESS;
    
    if ($current_page > DATA_SUCCESS) : $prev =  "
  上一页"; endif;

    $tmpl = "
   
   
     $prev $spans $next 
    
  ";
    
    return $tmpl;
}

// 获取访问token

function get_access_token()

{

    return md5('OneBase' . date("Ymd") . API_KEY);
}

/**

 * 格式化字节大小

 * @param  number $size      字节数

 * @param  string $delimiter 数字和单位分隔符

 * @return string            格式化后的带单位的大小

 * @author 麦当苗儿 
  
    */ function format_bytes($size, $delimiter = '') { $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB'); for ($i = 0; $size >= 1024 && $i < 5; $i++) : $size /= 1024; endfor; return round($size, 2) . $delimiter . $units[$i]; } /** * 时间戳格式化 * @param int $time * @return string 完整的时间显示 * @author huajie 
   
     */ function format_time($time = null, $format='Y-m-d H:i:s') { if (null === $time) : $time = TIME_NOW; endif; return date($format, intval($time)); } /** * 删除所有空目录 * @param String $path 目录路径 */ function rm_empty_dir($path) { if (!(is_dir($path) && ($handle = opendir($path))!==false)) : return false; endif; while(($file = readdir($handle))!==false) { if(!($file != '.' && $file != '..')) : continue; endif; $curfile = $path . SYS_DS_PROS . $file;// 当前目录 if(!is_dir($curfile)) : continue; endif; rm_empty_dir($curfile); if(count(scandir($curfile)) == 2) : rmdir($curfile); endif; } closedir($handle); } /** * 通过类创建逻辑闭包 */ function create_closure($class = null, $method_name = '', $parameter = []) { $func = function() use($class, $method_name, $parameter) { $object = get_sington_object($class, $class); return call_user_func_array([$object, $method_name], $parameter); }; return $func; } /** * 通过闭包列表控制事务 */ function closure_list_exe($list = []) { Db::startTrans(); try { foreach ($list as $closure) : $closure(); endforeach; Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); throw $e; } } /** * 写入执行信息记录 */ function write_exe_log($begin = 'app_begin', $end = 'app_end', $type = 0) { $request = request(); $source_url = empty($_SERVER["HTTP_REFERER"]) ? '未知来源' : $_SERVER["HTTP_REFERER"]; $exe_log['ip'] = $request->ip(); $exe_log['exe_url'] = $request->url(); $exe_log['exe_time'] = number_format((float)debug($begin, $end), 6); $exe_log['exe_memory'] = number_format((float)debug($begin, $end, 'm'), 2); $exe_log['exe_os'] = get_os(); $exe_log['source_url'] = $source_url; $exe_log['session_id'] = session_id(); $exe_log['browser'] = browser_info(); $exe_log['status'] = DATA_NORMAL; $exe_log['create_time'] = TIME_NOW; $exe_log['update_time'] = TIME_NOW; $exe_log['type'] = $type; $exe_log['login_id'] = is_login(); $exe_log_path = "../runtime/log/exe_log.php"; file_exists($exe_log_path) && $now_contents = file_get_contents($exe_log_path); $arr = var_export($exe_log, true); empty($now_contents) ? $contents = "
     
   
  
 
网友评论