zoukankan      html  css  js  c++  java
  • php 功能函数集

    1.获取页面闭合带id标签数据

    View Code
     1 <?php
     2     header("Content-type: text/html; charset=utf-8"); 
     3     /**
     4      * $tag_id  HTML tag_id like id="abc"
     5      * $url     web url
     6      * $tag     HTML tag
     7      * $data    HTML data if $url set to false
     8      * @example echo getWebTag('id="nav"','http://mail.163.com/html/mail_intro/','ul');
     9      */
    10     function getWebTag($tag_id,$url=false,$tag='div',$data=false){
    11         if($url !== false){
    12             $data = file_get_contents( $url );
    13         }
    14         $charset_pos = stripos($data,'charset');
    15         if($charset_pos) {
    16             if(stripos($data,'utf-8',$charset_pos)) {
    17                 $data = iconv('utf-8','utf-8',$data);
    18             }else if(stripos($data,'gb2312',$charset_pos)) {
    19                 $data = iconv('gb2312','utf-8',$data);
    20             }else if(stripos($data,'gbk',$charset_pos)) {
    21                 $data = iconv('gbk','utf-8',$data);
    22             }
    23         }
    24         
    25         preg_match_all('/<'.$tag.'/i',$data,$pre_matches,PREG_OFFSET_CAPTURE);    //获取所有div前缀
    26         preg_match_all('/<\/'.$tag.'/i',$data,$suf_matches,PREG_OFFSET_CAPTURE); //获取所有div后缀
    27         $hit = strpos($data,$tag_id);
    28         if($hit == -1) return false;    //未命中
    29         $divs = array();    //合并所有div
    30         foreach($pre_matches[0] as $index=>$pre_div){
    31             $divs[(int)$pre_div[1]] = 'p';
    32             $divs[(int)$suf_matches[0][$index][1]] = 's';    
    33         }
    34         
    35         //对div进行排序
    36         $sort = array_keys($divs);
    37         asort($sort);
    38         
    39         $count = count($pre_matches[0]);
    40         foreach($pre_matches[0] as $index=>$pre_div){
    41             //<div $hit <div+1    时div被命中
    42             if(($pre_matches[0][$index][1] < $hit) && ($hit < $pre_matches[0][$index+1][1])){
    43                 $deeper = 0;
    44                 //弹出被命中div前的div
    45                 while(array_shift($sort) != $pre_matches[0][$index][1] && ($count--)) continue;
    46                 //对剩余div进行匹配,若下一个为前缀,则向下一层,$deeper加1,
    47                 //否则后退一层,$deeper减1,$deeper为0则命中匹配,计算div长度
    48                 foreach($sort as $key){
    49                     if($divs[$key] == 'p') $deeper++;
    50                     else if($deeper == 0) {
    51                         $length = $key-$pre_matches[0][$index][1];
    52                         break;
    53                     }else {
    54                         $deeper--;
    55                     }
    56                 }
    57                 $hitDivString = substr($data,$pre_matches[0][$index][1],$length).'</'.$tag.'>';
    58                 break;
    59             }
    60         }
    61         return $hitDivString;
    62     }
    63     
    64     echo getWebTag('id="nav"','http://mail.163.com/html/mail_intro/','ul');
    65     echo getWebTag('id="homeBanners"','http://mail.163.com/html/mail_intro/');
    66     echo getWebTag('id="performance"','http://mail.163.com/html/mail_intro/','section');
    67 
    68 //End_php

    1.1 由(1)改进为获取页面任意标签,参考《颠覆想象的php解析获取跨域HTML标签

    View Code
      1  <?php
      2     header("Content-type: text/html; charset=utf-8"); 
      3     /**
      4       * $tag_id  HTML tag_id like id="abc"
      5       * $url     web url
      6       * $tag     HTML tag
      7       * $data    HTML data if $url set to false
      8       * $first   Only get the first match
      9       * @example 
     10         var_dump(getWebTag('id="nav"','http://mail.163.com/html/mail_intro/','ul'));
     11       */
     12     function getWebTag($tag_id,$url=false,$tag='div',$data=false,$first=false){
     13         //默认采用URL获取数据
     14         if($url !== false){
     15             $data = file_get_contents( $url );
     16         }
     17         //页面编码判定及转码
     18         $charset_pos = stripos($data,'charset');
     19         if($charset_pos) {
     20             if(stripos($data,'charset=utf-8',$charset_pos)) {
     21                 $data = iconv('utf-8','utf-8',$data);
     22             }else if(stripos($data,'charset=gb2312',$charset_pos)) {
     23                 $data = iconv('gb2312','utf-8',$data);
     24             }else if(stripos($data,'charset=gbk',$charset_pos)) {
     25                 $data = iconv('gbk','utf-8',$data);
     26             }
     27         }
     28 
     29         //匹配命中标签至数组$hits
     30         preg_match_all('/<'.$tag.'[^<]*?'.$tag_id.'/i',$data,$hits,PREG_OFFSET_CAPTURE);
     31         if(count($hits[0]) === 0) {                //未命中,直接返回
     32             return '没有匹配项!';
     33         }
     34 
     35         preg_match_all('/<'.$tag.'/i',$data,$pre_matches,PREG_OFFSET_CAPTURE);        //获取所有HTML标签前缀
     36         preg_match_all('/<\/'.$tag.'/i',$data,$suf_matches,PREG_OFFSET_CAPTURE);     //获取所有HTML标签后缀
     37 
     38         //判断是否<div></div>格式,是则添加结束标签,否则为false;  注:img、input等可能不是这种格式,此时$suf_matches[0]为空。
     39         if(!empty($suf_matches[0])) $endTag = '</'.$tag.'>';
     40         else $endTag = false;
     41         
     42         //合并所有HTML标签
     43         $htmltags = array();
     44         if($endTag !== false){
     45             foreach($pre_matches[0] as $index=>$pre_div){
     46                 $htmltags[(int)$pre_matches[0][$index][1]] = 'p';
     47                 $htmltags[(int)$suf_matches[0][$index][1]] = 's';
     48             }
     49         }else{
     50             foreach($pre_matches[0] as $index=>$pre_div){
     51                 //非<div></div>格式,获取前缀下标后的第一个>作为标签结束
     52                 $suf_matches[0][$index][1] = stripos($data,'>',$pre_matches[0][$index][1])+1;
     53                 
     54                 $htmltags[(int)$pre_matches[0][$index][1]] = 'p';
     55                 $htmltags[(int)$suf_matches[0][$index][1]] = 's';
     56             }
     57         }
     58         //对所有HTML标签按index进行排序
     59         $sort = array_keys($htmltags);
     60         asort($sort);
     61 
     62         //开始获取命中字符串
     63         $hitTagStrings = array();
     64         foreach($hits[0] as $hit){
     65             $hit = $hit[1];        //获取命中index
     66 
     67             $count = count($sort);    //循环控制,$count--避免无限循环
     68             foreach($pre_matches[0] as $index=>$pre_div){
     69                 //最后一个$pre_matches[0][$index+1]会造成数组出界,因此设置其index等于总长度
     70                 if(!isset($pre_matches[0][$index+1][1])) $pre_matches[0][$index+1][1] = strlen($data);
     71                 
     72                 //<div $hit <div+1    时div被命中
     73                 if(($pre_matches[0][$index][1] <= $hit) && ($hit < $pre_matches[0][$index+1][1])){
     74                     $deeper = 0;
     75                     //弹出被命中HTML标签前的所有HTML标签
     76                     while(array_shift($sort) != $pre_matches[0][$index][1] && ($count--)) continue;
     77                     //对剩余HTML标签进行匹配,若下一个为前缀(p),则向下一层,$deeper加1,
     78                     //否则后退一层,$deeper减1,$deeper为0则命中匹配结束标记,计算div长度
     79                     foreach($sort as $key){
     80                         if($htmltags[$key] == 'p') {    //进入子层
     81                             $deeper++;
     82                         }else if($deeper == 0) {        //碰到结束标记
     83                             $length = $key-$pre_matches[0][$index][1];        //长度等于结束标记index 减去 前缀index
     84                             break;
     85                         }else {                            //碰到子层结束标记
     86                             $deeper--;
     87                         }
     88                     }
     89                     $hitTagStrings[] = substr($data,$pre_matches[0][$index][1],$length).$endTag;
     90                     break;
     91                 }
     92             }
     93             //若只获取第一个匹配项,退出循环
     94             if($first && count($hitTagStrings) == 1) break;
     95         }
     96 
     97         return $hitTagStrings;
     98     }
     99     
    100     //直接用例
    101     var_dump(getWebTag('id="nav"','http://mail.163.com/html/mail_intro/','ul'));
    102 
    103     /*        //注释这句即可显示
    104     //ajax请求用例,必要参数:dataType:'json',type:'POST'
    105     $tag_id     =     urldecode($_POST['tag_id']);
    106     $url        =    urldecode($_POST['url']);
    107     $tag        =    isset($_POST['tag'])? urldecode($_POST['tag']) : 'div';
    108     $data        =    urldecode($_POST['data']);
    109     $first        =    (urldecode($_POST['first']) == 'checked')? true : false;
    110     foreach($_POST as $key => $value){
    111         if($value == 'EmPtYValue') $$key = false;
    112     }
    113     echo json_encode(getWebTag($tag_id,$url,$tag,$data,$first));
    114     //*/
    115 
    116 //End_php

     

    2.虚拟POST数据至远程服务器并获取返回数据

    View Code
     1 <?php
     2 header("Content-type: text/html; charset=utf-8"); 
     3 /**
     4  * $url  web url
     5  * $post POST data
     6  * @example 
     7     $data = array (
     8      'type' => 'text',
     9      'inputValue' => '哈哈'
    10     );
    11     $result = Post('http://tool.anzhuoxiazai.com:80//servlet/QRServlet', $data);
    12     echo str_replace("src='","src='http://tool.anzhuoxiazai.com/",$result);
    13  */
    14 function Post($url, $post = null) {
    15  $context = array();
    16  if (is_array($post)) {
    17      ksort($post);
    18      $context['http'] = array (
    19          'timeout'=>60,
    20          'method' => 'POST',
    21          'content' => http_build_query($post)
    22      );
    23  }
    24  return file_get_contents($url, false, stream_context_create($context));
    25 }
    26 
    27 $data = array (
    28  'type' => 'text',
    29  'inputValue' => '哈哈'
    30 );
    31 $result = Post('http://tool.anzhuoxiazai.com:80//servlet/QRServlet', $data);
    32 echo str_replace("src='","src='http://tool.anzhuoxiazai.com/",$result);
    33 //End_php

    3.文件夹复制

    View Code
     1 /** 
     2      * Copy file or folder from source to destination, it can do 
     3      * recursive copy as well and is very smart 
     4      * It recursively creates the dest file or directory path if there weren't exists 
     5      * Situtaions : 
     6      * - Src:/home/test/file.txt ,Dst:/home/test/b ,Result:/home/test/b -> If source was file copy file.txt name with b as name to destination 
     7      * - Src:/home/test/file.txt ,Dst:/home/test/b/ ,Result:/home/test/b/file.txt -> If source was file Creates b directory if does not exsits and copy file.txt into it 
     8      * - Src:/home/test ,Dst:/home/ ,Result:/home/test/** -> If source was directory copy test directory and all of its content into dest      
     9      * - Src:/home/test/ ,Dst:/home/ ,Result:/home/**-> if source was direcotry copy its content to dest 
    10      * - Src:/home/test ,Dst:/home/test2 ,Result:/home/test2/** -> if source was directoy copy it and its content to dest with test2 as name 
    11      * - Src:/home/test/ ,Dst:/home/test2 ,Result:->/home/test2/** if source was directoy copy it and its content to dest with test2 as name 
    12      * @todo 
    13      *     - Should have rollback technique so it can undo the copy when it wasn't successful 
    14      *  - Auto destination technique should be possible to turn off 
    15      *  - Supporting callback function 
    16      *  - May prevent some issues on shared enviroments : http://us3.php.net/umask 
    17      * @param $source //file or folder 
    18      * @param $dest ///file or folder 
    19      * @param $options //folderPermission,filePermission 
    20      * @return boolean 
    21      */ 
    22     function smartCopy($source, $dest, $options=array('folderPermission'=>0755,'filePermission'=>0755)) 
    23     { 
    24         $result=false; 
    25         
    26         if (is_file($source)) { 
    27             if ($dest[strlen($dest)-1]=='/') { 
    28                 if (!file_exists($dest)) { 
    29                     cmfcDirectory::makeAll($dest,$options['folderPermission'],true); 
    30                 } 
    31                 $__dest=$dest."/".basename($source); 
    32             } else { 
    33                 $__dest=$dest; 
    34             } 
    35             $result=copy($source, $__dest); 
    36             chmod($__dest,$options['filePermission']); 
    37             
    38         } elseif(is_dir($source)) { 
    39             if ($dest[strlen($dest)-1]=='/') { 
    40                 if ($source[strlen($source)-1]=='/') { 
    41                     //Copy only contents 
    42                 } else { 
    43                     //Change parent itself and its contents 
    44                     $dest=$dest.basename($source); 
    45                     @mkdir($dest); 
    46                     chmod($dest,$options['filePermission']); 
    47                 } 
    48             } else { 
    49                 if ($source[strlen($source)-1]=='/') { 
    50                     //Copy parent directory with new name and all its content 
    51                     @mkdir($dest,$options['folderPermission']); 
    52                     chmod($dest,$options['filePermission']); 
    53                 } else { 
    54                     //Copy parent directory with new name and all its content 
    55                     @mkdir($dest,$options['folderPermission']); 
    56                     chmod($dest,$options['filePermission']); 
    57                 } 
    58             } 
    59 
    60             $dirHandle=opendir($source); 
    61             while($file=readdir($dirHandle)) 
    62             { 
    63                 if($file!="." && $file!="..") 
    64                 { 
    65                      if(!is_dir($source."/".$file)) { 
    66                         $__dest=$dest."/".$file; 
    67                     } else { 
    68                         $__dest=$dest."/".$file; 
    69                     } 
    70                     //echo "$source/$file ||| $__dest<br />"; 
    71                     $result=smartCopy($source."/".$file, $__dest, $options); 
    72                 } 
    73             } 
    74             closedir($dirHandle); 
    75             
    76         } else { 
    77             $result=false; 
    78         } 
    79         return $result; 
    80     }

    4.文件遍历(可匹配模式)

    View Code
     1 /**
     2      * 遍历目录并获取所有目录即文件,以数组array('dirs'=>$dirs,'files'=>$files)方式返回。
     3      * @param $dir          //搜索目录
     4      * @param $pattern         // '*'搜索全部文件,可以智能匹配,如*.jpg 搜索jpg文件,*.{jpg,png}搜索jpg和png文件,区分大小写!!
     5      * @param $skip           //排除遍历文件,如"*.{jpg,png}"排除.jpg和.png类型文件
     6      * @param $subInclude   //默认遍历子目录,$subInclude设置为false则仅遍历当前目录
     7      * @param @flag            //glob函数的标记,有效标记如下:
     8             GLOB_MARK - 在每个返回的项目中加一个斜线 
     9             GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序) 
    10             GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式 
    11             GLOB_NOESCAPE - 反斜线不转义元字符 
    12             GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c' 
    13             GLOB_ONLYDIR - 仅返回与模式匹配的目录项 
    14      */
    15     function scandir_through($dir,$pattern='*',$skip=false,$subInclude=true,$flag=GLOB_BRACE){
    16         $dirs = array();
    17         $files = array();
    18         //获取当前目录下所有文件及文件夹
    19         $items  = glob($dir . '/*');
    20 
    21         //遍历所有项目,若设置$subInclude为true,则继续遍历子目录
    22         for ($i = 0; $i < count($items); $i++) {
    23             if ($subInclude && is_dir($items[$i])) {
    24                 $dirs[] = iconv('gb2312','utf-8',$items[$i]);
    25                 $add = glob($items[$i] . '/*');
    26                 if($add === false) $add = array();
    27                 $items = array_merge($items, $add);
    28             }else {
    29                 $slash = strrpos($items[$i],'/');
    30                 $dir = substr($items[$i],0,$slash);
    31                 //若当前文件匹配文件查找模式$pattern,则加入$files数组中
    32                 if(in_array($items[$i],glob($dir.'/'.$pattern,$flag)) && (($skip===false) || !in_array($items[$i],glob($dir.'/'.$skip,$flag)))) {
    33                     $items[$i] = iconv('gb2312','utf-8',$items[$i]);
    34                     $file = substr($items[$i],$slash+1);
    35                     $files[] = $items[$i];
    36                 }
    37             }
    38         }
    39         return array('dirs'=>$dirs,'files'=>$files);
    40     }

    5.zip压缩文件夹

    View Code
     1 /**
     2  * 打包文件夹成zip文件函数
     3  * @param $path        //打包文件夹路径
     4  * @param $zip        //ZipArchive 对象
     5  */
     6 function addFileToZip($path, $zip) {
     7     $handler = opendir($path); //打开当前文件夹由$path指定。
     8     /*
     9     循环的读取文件夹下的所有文件和文件夹
    10     其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename,
    11     为了不陷于死循环,所以还要让$filename !== false。
    12     一定要用!==,因为如果某个文件名如果叫'0',或者某些被系统认为是代表false,用!=就会停止循环
    13     */
    14     while (($filename = readdir($handler)) !== false) {
    15         if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作
    16             if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
    17                 addFileToZip($path . "/" . $filename, $zip);
    18             } else { //将文件加入zip对象
    19                 $zip->addFile($path . "/" . $filename);
    20             }
    21         }
    22     }
    23     @closedir($path);
    24 }
    25 //运用
    26 $zip = new ZipArchive();
    27 if ($zip->open('test.zip', ZipArchive::OVERWRITE) === TRUE) {
    28     addFileToZip('./testdir', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    29     $zip->close(); //关闭处理的zip文件
    30 }

     6.打印两个日期之间的日期

    View Code
    1 function prDates($start, $end) { 
    2     //将ISO Date 转成 Timestamp
    3     $dt_start = strtotime($start);
    4     $dt_end   = strtotime($end);
    5     do { 
    6         //将 Timestamp 转成 ISO Date 输出
    7         echo date('Y-m-d', $dt_start).PHP_EOL;
    8     } while (($dt_start += 86400) <= $dt_end);    // 重复 Timestamp + 1 天(86400), 直至大于结束日期中止
    9 }

     7.RC4加密算法

    View Code
     1 /*
     2  * rc4加密算法,二次加密即可还原
     3  * $pwd 密钥
     4  * $data 要加密的数据
     5  */
     6 function rc4 ($pwd, $data)//$pwd密钥 $data需加密字符串
     7 {
     8     $key[] ="";
     9     $box[] ="";
    10 
    11     $pwd_length = strlen($pwd);
    12     $data_length = strlen($data);
    13 
    14     for ($i = 0; $i < 256; $i++)
    15     {
    16         $key[$i] = ord($pwd[$i % $pwd_length]);
    17         $box[$i] = $i;
    18     }
    19 
    20     for ($j = $i = 0; $i < 256; $i++)
    21     {
    22         $j = ($j + $box[$i] + $key[$i]) % 256;
    23         $tmp = $box[$i];
    24         $box[$i] = $box[$j];
    25         $box[$j] = $tmp;
    26     }
    27 
    28     for ($a = $j = $i = 0; $i < $data_length; $i++)
    29     {
    30         $a = ($a + 1) % 256;
    31         $j = ($j + $box[$a]) % 256;
    32 
    33         $tmp = $box[$a];
    34         $box[$a] = $box[$j];
    35         $box[$j] = $tmp;
    36 
    37         $k = $box[(($box[$a] + $box[$j]) % 256)];
    38         $cipher .= chr(ord($data[$i]) ^ $k);
    39     }
    40     
    41     return $cipher;
    42 }

     8.utf8_substr UTF8编码字符串截取,解决中英文混杂截取

    View Code
     1 /**
     2   * $sting                         输入字符串
     3   * $start                         截取起始位,默认为0
     4   * $length                        截取长度,中英文长度都为1,默认为'',跟输入负数一样截取至字符串结束。
     5   * [\x00-\x7F]                    匹配英文字符
     6   * [\xC0-\xFF][\x80-\xBF]+        匹配中文字符
     7   * 模式修正符s                     将换行当成普通字符,此时.*能匹配包括换行任意字符
     8   */
     9  function utf8_substr($string, $start=0, $length=''){
    10      return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$start.'}'
    11      .'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$length.'}).*#s','$1',$string);
    12  }

    9.创建透明图片

    $image = imagecreatetruecolor(300,300); 
    $transparent = imagecolorallocatealpha($image, 255, 255, 255,127);    //创建透明背景色 
    imagecolortransparent($img, $transparent);
    imagefill($image, 0, 0, $transparent); //填充透明背景色
    View Code

     10.图片灰白化

     1 <?php
     2 /**
     3  * 图片黑白处理
     4  * @params     $file          图片地址
     5  * @params    $output     直接输出
     6  * @params    $newFile    保存黑白图片
     7  * @usage
     8  1、imageGray('test.png');
     9  2、imageGray('test.png',false,'test_gray.png');
    10  */
    11 function imageGray($file,$output=true,$newFile=false){
    12     if(preg_match('#\.(jpg|png|jpeg|gif)$#i',$file,$match)){
    13         //不同类型图片读取函数
    14         $create_function = 'imagecreatefrom'.$match[1];
    15         //根据不同类型图片创建图片
    16         $im = $create_function($file);
    17         
    18         //过滤成灰色图片
    19         if($im) imagefilter($im, IMG_FILTER_GRAYSCALE);
    20         
    21         //不同类型图片写入函数
    22         $image_function = 'image'.$match[1];
    23         //输出到浏览器端
    24         if ($output) {
    25             header ("Content-type: image/".$match[1]);
    26             $image_function($im);
    27         }
    28         //保存黑白照片
    29         if($newFile) {
    30             $file = $newFile;
    31             $image_function($im,$file);
    32         }
    33         //删除图片资源
    34         imagedestroy($im);
    35     }
    36     return $file;
    37 }
    38 ?> 
    View Code

     11.域名授权认证

     1 function checkAuthenticated()
     2 {    
     3     //合法域名数组
     4     $domain_array = array(
     5         base64_encode(base64_encode('127.0.0.1')),
     6         base64_encode(base64_encode('localhost')),
     7         base64_encode(base64_encode('test.com')),
     8         base64_encode(base64_encode('*.test.com')),
     9     );
    10     //对域名数组系列化并进行base64编码,为了安全,做了拼接处理,防止被直接解编码反系列化获取结果
    11     $str = base64_encode(base64_encode(serialize($domain_array))."|".serialize($domain_array));
    12     //解编码,分离拼接
    13     $arr = explode("|",base64_decode($str));
    14     //获取数据系列化部分,反系列化得到域名数组
    15     $arr = unserialize($arr[1]);
    16     //遍历域名数组,解编码获取域名
    17     foreach($arr as $k=>$v)
    18     {
    19         $arr[$k] = base64_decode(base64_decode($v));
    20     }
    21     //获取当前URL的host地址
    22     $host = $_SERVER['HTTP_HOST'];
    23     //host:端口 分离
    24     $host = explode(":",$host);
    25     //去除端口部分
    26     $host = $host[0];
    27     //认证通过标志,默认未通过认证
    28     $passed = false;
    29     //遍历域名数组
    30     foreach($arr as $k=>$v)
    31     {
    32         //带通配子域名情况,使用preg_match进行匹配检测
    33         if(substr($v,0,2)=='*.')
    34         {
    35             $preg_str = substr($v,2);    //去掉通配部分
    36             if(preg_match("/".$preg_str."$/",$host)>0)    //preg_match('/test.com$/','www.test.com') ,$preg_str中的.可匹配任意字符,包括.
    37             {
    38                 $passed = true;        //匹配通过,退出循环
    39                 break;
    40             }
    41         }
    42     }
    43     if(!$passed)        //标志为假,因为foreach中为判断非通配域名(test.com),因此还需要进行一次in_array判断
    44     {
    45         if(!in_array($host,$arr))
    46         {
    47             return false;
    48         }
    49     }
    50     return true;
    51 }
    View Code

    12.获取文件权限值

    1 function getChmod($filepath){
    2     return substr(base_convert(@fileperms($filepath),10,8),-4);
    3 }

    13.数组不定长多键值排序

     1 <?php
     2 /**
     3  * PHP数组不定长多键值排序
     4  *
     5  * @param array $list     数据源
     6  * @param array $rules    排序规则 ['key1'=>'asc', 'key2' => 'desc', ...]
     7  * @return array
     8  */
     9 function smartMultiSort($list, $rules) {
    10     $multisortParams = [];
    11     foreach($rules as $key => $sort) {
    12         $multisortParams[$key] = [];
    13         $multisortParams[$key . $sort] = constant(strtoupper("sort_{$sort}"));
    14     }
    15     foreach($list as $item) {
    16         foreach($rules as $key => $sort) {
    17             $multisortParams[$key][] = $item[$key];
    18         }
    19     }
    20     $multisortParams[] = &$list;
    21 
    22     call_user_func_array('array_multisort', $multisortParams);
    23     return array_pop($multisortParams);
    24 }
    25 
    26 //示例
    27 $list = array ();
    28 $list [] = array (
    29         'id' => 1,
    30         'name' => '学生1',
    31         'school' => '学校1',
    32         'class' => '班级1'
    33 );
    34 $list [] = array (
    35         'id' => 4,
    36         'name' => '学生4',
    37         'school' => '学校2',
    38         'class' => '班级2'
    39 );
    40 $list [] = array (
    41         'id' => 3,
    42         'name' => '学生3',
    43         'school' => '学校2',
    44         'class' => '班级1'
    45 );
    46 $list [] = array (
    47         'id' => 2,
    48         'name' => '学生2',
    49         'school' => '学校1',
    50         'class' => '班级2'
    51 );
    52 $list [] = array (
    53         'id' => 5,
    54         'name' => '学生5',
    55         'school' => '学校2',
    56         'class' => '班级3'
    57 );
    58 print_r(smartMultiSort($list, ['school' => 'desc','id' => 'asc']));
    View Code
    作者:Zjmainstay
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    版权信息
  • 相关阅读:
    docker学习网址
    ubantu安装docker
    ssh查看自己的公钥
    Ubuntu 桥接设置 (在ubantu 18.04.5 之前好用 ,,,,18.04.5 就不好用了)
    学习地址
    MANO官网
    centos7 的防火墙 开放端口
    centos7安装arp-sacn (./configure make makeinstall)
    yum源-postgresql
    行拆分,列合并
  • 原文地址:https://www.cnblogs.com/Zjmainstay/p/php_functions.html
Copyright © 2011-2022 走看看