PHP經常使用函數歸類【持續整理中......】

一。PHP基礎語法
 
變量,常量
   
    嚴格區分大小寫,但內置結構或關鍵字無所謂(echo)
    命名:不能以數字,空格,.來開頭,可是能夠有漢字,eg:$變量="aa";
    可變變量:$a='aa';$$a="bb";則 $aa="bb";
    引用賦值:$a="aa"; $b=&$a; 則改變$a的值,$b也變化。不一樣:存儲結構是分開的,即便unset($a),$b還在(區分C語言)
    變量類型:int str array bool object float resource null
    全局變量:            $_SESSION,  $_COOKIE,  $_POST,  $_GET,  $_REQUEST, $_FILES,$_EVN
    靜態變量:
            static  [詳細見下圖] 
    靜態方法:靜態方法不須要所在類被實例化就能夠直接使用。Math::Max($a,$b);(未實例化Math類直接調用靜態方法Max)
    常量:
        define("NAME",$value,[TRUE]);//若是第三個參數爲true,則不區分大小寫,默認是區分大小寫的
        預約義常量:
              PHP_OS="WINDOWS";  PHP_VERSION="版本"; 
              E_ERROR=1,錯誤,致使腳本終止;  E_WARNING=2,警告,腳本不終止 ;E_NOTICE=8,非關鍵性錯誤
        魔術常量:【全是返回物理路徑,即便被包含輸出,輸出的也是源頭代碼的信息,非當前包含文件的信息,和$_SERVER區分】
              __FILE__    當前文件名稱
              __CLASS__    當前類名稱
              __FUNCTION__      當前函數名稱
              __METHOD__        當前方法名稱
              __LINE__                當前行數名稱

總結:
      (全局)常量:(默認常量就是全局的)存儲在(靜態)數據段

變量
     全局變量:存儲在靜態數據段
     局部變量:存儲在棧中
     靜態變量:(無論全局/局部)存儲在靜態數據段中

類型轉換php

    1.setType($a);//獲取變量的類型
    2.$b=(int)$a;//把$a轉換爲整形
       $b=intval($a);
    3.is_int($b);//判斷$b是否爲整形,返回bool值

    類型轉換:(int),(bool),(float),(),(string),(),(array),(),(object); 
                      intval(),floatval();strval()
    判斷類型:
                    is_bool/int/float/string/array/object/resource/null
                    is_numberic();'//判斷是否爲任何類型的數字或者數組字符串
                    is_callable();//判斷是否爲有效函數名稱

運算符html

     算數運算符:+ - * / % ++ --
     鏈接運算符: .
     賦值運算符: =, +=,-=,*=,/=,%=,.=
     比較運算符:>,<,==,===,!= <>,!==
     邏輯運算符: and,&&  ;   or,||   ;   not,!  ;  xor(邏輯異或,兩邊不一樣返回TRUE,相同返回FALSE)
     位運算符    : & ;|;^(異或,不一樣返回1);~(非運算符,1.0取反);<<左移,右邊空出的補0;>>右移左邊空出的補0
     其餘運算符: 
                        ?:  三目運算符    舉例:$a=$bool?$b:$c; //若$bool成立,$a=$b;不然$a=$c
                        @ 忽略錯誤
                        =>數組下標用
                        ->調用對象值用
                        ·· 反引號爲執行運算符?? 
                        instanceof 類型運算符  class ClassOne{} $a=new ClassOne(); var_dump(  $a instanceof ClassOne  );//返回true

流程控制mysql


        1.if(){}else{}
        2.while(){};
        3.do{}while();$
        4.for($a=1;$a<10;$a++){}
        5.switch($a){
            case 1:echo 1; break;
            case 2:echo 2;break;
            default: echo "this is defaut value";
            }
    continue,break;exit   區別:
        continue跳過當前循環,循環還在繼續
        break 跳出當前循環,循環終止
        exit;   終止當前腳本,這行代碼後邊的代碼不執行了就

函數 正則表達式

   命名:遵循變量命名規則便可,函數不可一被重載、
   做用:函數實現告終構化編程,提升了代碼的可維護性
   
    全局變量:整個腳本中皆可使用
    局部變量:只有在函數體內使用,執行完函數自動釋放
       |---> 分爲靜態存儲類型和動態存儲類型;  static $a爲靜態變量,函數執行完後,不會被釋放
    函數內局部變量編程全局變量:1.global ; 2.$GLOBAL['']使用全局數組   

     幾種類型函數
    1.引用參數的函數:function(&$a){}//函數內對形參$a的操做,會對實參也形成影響 eg:sort()
    2.默認參數的函數:function($a=0){}//沒有參數傳入的話,默認$a=0
    3.可變參數個數的函數:function($a,$b$c,...){}
        //原理:經過fun_get_args()函數,接受全部參數並返回一個數組來使用,因此能夠有多個參數  EG: echo(),array_merge()
    4.回調函數:$fun="one"; function one(){}  當調用$fun()的時候,就是再調用one()函數,call_user_func_array()
    5.遞歸函數:function test(){ test()}//在函數中再次調用函數,但注意死循環的問題,要有執行結束跳出



二。PHP經常使用函數

經常使用函數:

    echo()【語言結構】算法

【語言結構】【有返回值】,若傳輸失敗致使沒有輸出,它返回false
    var_dump()
【有返回值,翻譯一個合法的PHP代碼】
printf("my name is %s, age %d", $name, $age);,打印出來
跟printf類似,但不打印,而是返回格式化後的文字,其餘的與printf同樣
數組函數:
【1.無返回值,傳值引用,就直接對原數組進行了修改】
    按V:sort,rsort,asort,arsort,
    按K:ksort,krsort
natsort();//區分大小寫的排序
              natcasesort();//不區分大小寫的排序,
當遇到字符徹底同樣,按照數字排 eg: FILE1,FILE2, 這兩個字符相同,再按照數字1<2排,因此結果   FILE1,FILE2
usort($arr,"strnatcmp")//回調類的排序,把$arr數組裏的每個元素丟到strnatcmp()[非天然數排序]處理【返回新的排序數組】
    規律:
有"r"的倒序排
             有"u"的,表示要丟到回調函數中處理的

【都有返回值,沒有在原來參數上修改】
        1.array_values($arr);//獲取$arr中的值,去掉下標【返回值新索引數組】
        2.array_keys($arr[,"str",true])//獲取$arr中全部字符是"str"的下標,造成索引數組,true表示區分大小寫【返回新索引數組】
        3.array_search("is",$arr[,true]) //返回值"is"在$arr中的key,找不到返回fales,true表示嚴格按照類型(8,"8")【返回第一個匹配值】
        4.in_array("str",$arr);//判斷"str"在$arr中是否存在,【返回BOOL】
        5.is_array($arr);//判斷是不是數組【返回BOOL】
        6.array_key_exists($key,$arr); //查詢$arr中是否有$key,【返回BOOL】
        7.array_flip($arr);// 交換鍵值,若有重複,後來居上,【返回新數組】
        8.array_reverse($arr,[true|false]);//數組順序反轉,param2是否保留原來鍵值【返回新關聯/索引數組】
array_column(array(),'name'[,name_two]) — 返回數組中指定的name列[可選參數,若是有返回name=>name_two的形式]【返回一維數組】
 
   3.元素個數和惟一性
        1.array_unique($arr);//去掉$arr中的重複值,重複的保留第一個值,【返回數組,鍵值保留】
        2.array_count_values($arr)//統計數組值出現的次數,【返回數組,KEY爲原來數組的值,VALUE爲統計的次數】
        3.count($arr[,1])/sizeof();//統計$arr的元素個數,參數"1"表示統計多維數組開啓,默認0爲關閉【返回統計個數】
 

  4.回調函數sql

        1.array_filter($arr,"function");//把$arr放到函數function中處理,【返回判斷爲TRUE的數據組成新數組,鍵值保留】
        2.array_walk($arr,"function"[,"data"]);//把$arr放到function($v,$k,$data)中處理【返回值爲bool】
        4.array_reduce($arr,myfunction[,initial]):把一維數組$arr中的值依次傳到自定義函數myfunction($v1,$v2)的v2上,v1爲累加值相似於( .= ),[若是有initial,先把其當v1傳進去]【返回字符串】
 
  5.拆分,合併,分解,接合數組
        1.array_slice($arr,1[,2]);//在$arr中,從第二個開始[,返回倆個值]【返回新數組(對原數組無影響),鍵值保留】
        2.array_splice($arr,1[,2,"aaa","bb"]);//,從$arr第二個開始取,刪除或替換2個值【返回值爲新數組,拆掉原數組】
        3.array_combine($arr1,$arr2);//數組$arr1爲KEY,$arr2爲VALUES結合造成新索引數組【返回索引數組】
        4.array_merge($arr1,$arr2,$arr3...);//數組進行合併,保留鍵值,有重複,後來者居上【返回新數組】
               array_merge發現有key值相同的,取後者;
               $arr1+$arr2 發現有key值相同的,取前者,第二個重複的值丟棄
        5.array_intersect($arr1,$arr2)//返回兩個數組的交集,鍵值不變
        6.array_diff($arr1,$arr2)//返回兩數組的差集,返回的值爲第一個數組的值,鍵值不變
        7.array_chunk($arr,2)//分割數組,把$arr按照【2個爲一組】均等分割【返回一個二維數組】

【2.無返回值,傳值引用,就直接對原數組進行了修改】
        1.array_shift($arr)//從開頭,刪除數組第一個元素
        2.array_unshift($arr,"one","two")//從開頭,添加元素
        3.array_pop($arr)//從結尾,刪除數組最後一個元素
        4.array_push($arr,"aaa");//從結尾,添加元素
        
        6.current($arr)//返回數組中的當前單元 好比是關聯數組是不知道下標,能夠輸出當前數組的辦法解決
        7.key($arr)//返回當前指針指向元素的鍵值
        8.next($arr)//當前指針下移
        9.pre($arr)//當前指針上移
        10.end($arr)//指針指到最後
        11.reset($arr)//指針迴歸到開頭
        
        12.unset($arr)//銷燬此數組
 
  7.其餘
        1.array_rand($arr,2);//隨機返回兩個$arr數組當中的key【返回值爲值或者數組】
        2.shuffle($arr)//隨機的重組$arr,順序變亂【返回新數組,保留鍵值】
        3.array_sum($arr);//返回$arr的value的和【返回一個值】
        4.range(0,10,2,)//快速建立0,10的數組,間隔爲2,因此有5個值【返回新索引數組】
        5.http_build_query($arr)//把關聯數組轉換成一個通過urlencode加密的URL eg:array["a"=>2];=>URL:a=2&
       

字符串函數
       返回bool
            1.isset($a)//當$a=NULL 或不存在,返回false,反之爲true
            2.empty($a)//當$a=NULL/''/array()/0/'0'/不存在 時 返回true,反之爲false
 
 
        返回值爲自字符
            1.截取字符串的一部分,第一個字符位置爲0
substr_replace($str,"aaa",start[,length]);在$str上操做,從第start個開始,把【後邊】的字符[全/或length個] 替換
strstr($email,"@"[,true])    //從頭開始搜索,無true返回@後邊字符,有true返回@前邊的字符[strrchr對比]
str_replace(被替換詞,替換詞,被搜索字符串,[統計替換次數$num])   前兩個參數也可爲數組,兩個數組元素個數相同
            7.str_repeat($str,num);//重複$str字符串 num次,
返回值爲數字類的
strpos($str,"@");//返回@【第一次出現的位置】
             2.strrpos($str,"@");//返回@【最後一次出現的位置】
             3.str_word_count($str[,0/1/2]);
單詞的數量[0指返回次數,默認值/1指以數組形式返回單詞值/2指返回關聯數組,k爲單詞首字母下標,v單詞值]
             4.strcmp($str1,$str2);//按ASCII碼比較  str1>str2 則返回1 相等返回0 <返回-1  strcasecmp不區分大小寫的比較
             5.strnatcmp($str1,$str2);//按天然數的排序比較,上邊的比較10<2;本函數比較10>2,按天然數大小來的
                 strcasecmp($str1,$str2);strnatcasecmp//以上4個函數,$str1,$str2比較,【返回值:相等0,小於-1,大於1】
             6.number_format(10000[,2]);        //==》10,000.00        把第一個參數格式化,保留2位小數
             7. strlen($string);成功則返回字符串 $string 的長度
             8. mb_strlen($string,'utf8');//獲取字符串$string長度,多字節的字符被計爲 1。  

文本處理類
            1.strtoupper($str)//字母全轉爲大寫【返回全大寫字符串】
            2.strtolower()//字母全轉爲小寫【返回全小寫字符串】
strtotime('2015-10-10 10:10:10');//指定時間轉換爲時間戳【返回時間戳】
str_pad($str,length,[---,STR_PAD_BOTH]); //在$str的兩邊填補「---「,注意,length若小於$str長度,不填補    
[,"a",STR_PAD_BOTH])//
            7.ucfirst()//整個$str首字母大寫
            8.ucword()//$str每一個單詞首字母大寫

HTML類處理
htmlspecialchars($str)//函數把【預約義字符】轉換爲【 HTML 實體】,&轉換成&amp
 
              htmlspecialchars_decode($str);//把【HTML實體】轉換成【預約義字符】,&amp轉換成&
            2.htmlentities($str);,函數把【預約義字符】轉換爲【 HTML 實體】,&轉換成&amp,有亂碼問題,注意第二第三個參數,若編碼不正確,會在實體化時把信息丟失
               html_entity_decode($str)////把【HTML實體】轉換成【預約義字符】,&amp轉換成&,  &gt 轉成 <
            3.addslashes($html);               //添加轉義字符「/」
               stripslashes($html);                 //刪除轉義字符「/」
 
            5.nl2br($str)                                //在$str中的換行/n前插入<br>,由於\n在源碼能夠換行,可是在瀏覽器窗口不行,有這個就能夠
            6. from_charset ; to_charset,$str);        //轉化字符格式     $file_name = iconv("gb2312","utf-8",$file_name);
 
原則,能用字符串函數解決不用正則,速度問題]
        字符串的匹配查找
preg_match($pattern,$subject,$arr);//按正則$pattern處理$subject            2.$pattern,$subject,$arr$pattern處理$subject, 所有匹配結果返回到數組中【函數的返回值爲匹配次數】
 
            4.strpos,strrpos,substr($str,position)//聯合使用
         字符串的替換
            1.preg_replace($pattenr,$replace,$str);//【強大的字符串處理函數】
成$replcae【返回值爲處理後的字符串】
 
         字符串的分割和連接
經過一個正則表達式分隔字符串【返回值爲數組】                        
                        舉例:$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
結果Array([0] => hypertext,[1] => language[2] => programming)
 
 
         
  [$file=c://php/index.php]
基礎函數
1.file_exists($file)//文件是否存在,【true/false】
        2.filesize($file)  //返回文件的大小【大小字節/出錯false】
        3.is_readale($file)//是否可讀【返回bool】
        4.is_writeable($file)//是否可寫【返回bool】
        5.is_executable($file)//是否可執行【返回bool】
        6.filectime($file)//文件建立時間【時間戳】
        7.filemtime($file)//文件修改時間【時間戳】
        8.fileatime($file)//文件訪問時間【時間戳】
        9.stat($file)//返回文件的大部分信息【文件信息數組】
目錄的基本操做 
1.basename($file)//返回文件名,index.php
        2.dirname($file)//返回文件的路徑,c://php/
["dirname"目錄名] ["basename"文件名] ["extension"文件後綴]
      
    目錄複製,刪除,統計大小使用的總結:
        本質:依靠遞歸思想,對目錄的的循環遍歷,經過每個文件的操做,得出結果
        函數:
                複製:copy($org,$to);mkdir()
                刪除:unlink($file);mrdir();
                統計大小:filesize($file)
     遍歷目錄
        1.opendir($file)//打開一個目錄,參數爲目錄名或目錄路徑【返回資源型的目錄句柄$dir_handle,無權限返false】
        2.readdir($dir_handle);//讀取目錄,參數爲目錄句柄,while,返回當前指向對象的名字,目錄指針後移【返回filename,沒有是返false】
        3.closedir($dir_handle)//關閉打開的目錄
   
複製代碼
// 遍歷文件夾$path,生成TABLE

function menu_list($root_path){
   $num=0;//存儲條數  
$dir_handle=opendir($root_path);
echo "<table border=1 cellspacing=5 cellpadding=10 align='center'>";
echo "<caption>{$root_path}文件夾</caption>";
echo "<tr>";
echo "<td>文件名</td><td>類型</td><td>大小</td><td>建立時間</td>";
echo "</tr>";
while($file_name=readdir($dir_handle)){
if($file_name =="." || $file_name=="..")continue;
      $cur_path=$root_path."/".$file_name;
      $bgcolor=$num++%2==0?"#FFFFFF":"#CCCCCC";
      $cate=filetype($cur_path)=="dir"?"目錄":"文件";
echo "<tr color={$bgcolor}>";
      $file_name = iconv_change($file_name);
echo "<td>{$file_name}</td>";
echo "<td>{$cate}</td>";
echo "<td>".filesize($cur_path)."</td>";
echo "<td>".date("Y-m-d H:i:s",filectime($cur_path))."</td>";
echo "</tr>";
   }
echo "<tr><td colspan=4 align=center>文件總數爲:{$num}個</td></tr>";
echo "</table>";
}

      創建和刪除目錄
        1.mkdir("dir_name");//創建一個空的目錄
        2.rmdir("dir_name");//刪除一個空的目錄
            unlink("file_name")//刪除一個文件,當刪除目錄是,必須刪除該目錄下的文件

/**
 * 刪除文件夾[也能夠刪除文件]
 * @param $root_path 該文件夾的路徑
 */
function del_dir($root_path){
// echo file_exists($root_path)."--<br>";
if(!file_exists($root_path))exit('文件不存在');
if(is_file($root_path))unlink($root_path);exit;


   $dir_handle=opendir($root_path);//打開此文件夾
while($cur_name=readdir($dir_handle)){//遍歷文件夾
if($cur_name =="." || $cur_name=="..")continue;//刪除前兩個默認的
$cur_path=$root_path."/".$cur_name;
if(is_file($cur_path)){
//是文件,執行刪除文件
del_file($cur_path);
      }else{
//是文件夾,刪除文件夾,遞歸
del_dir($cur_path);
      }
   }
closedir($dir_handle);
rmdir($root_path);
}

/*刪除文件操做*/
function del_file($file_path){
return unlink($file_path);
}
複製代碼

統計目錄大小【得自定義函數,不自帶】數據庫

 

複製代碼
/**
 * 統計文件夾大小[也能夠統計文件]
 * @param 文件夾的目錄路徑
 * @return 返回該目錄的大小
 */

function dirSize($dir){
   $dir_size=0;
if(!file_exists($dir))exit("文件不存在");
if(is_file($dir))return filesize($dir);//若是是文件,返回文件大小  
$handle=opendir($dir);
while($cur_name=readdir($handle)){
if($cur_name=="." || $cur_name=="..")continue;
      $cur_path=$dir."/".$cur_name;//獲取當前文件的路徑
if(is_file($dir)){
//若是是文件,累加文件大小到file_size
$dir_size+=filesize($cur_path);
      }
if(is_dir($dir)){
//若是是文件夾,累加文件夾大小到file_size
$dir_size +=dirSize($cur_path);
      }
   }
return $dir_size;
}
/**
 * 轉換單位大小
 * @param,data 以B爲單位的字節大小
 * @param,unit 轉換後的單位
 * @return 轉換後的數字及單位,字符串格式
 */
function transform_unit($data,$unit="MB"){
$unit=strtoupper($unit);
switch ($unit) {
case 'B':
$data=$data/pow(1024, 0);
break;
case 'KB':
$data=$data/pow(1024, 1);
break;
case 'MB':
$data=$data/pow(1024, 2);
break;
case 'GB':
$data=$data/pow(1024, 3);
break;
case 'TB':
$data=$data/pow(1024, 4);

   }
return round($data,2).$unit;
}
// echo transform_unit(dirSize($path),"KB");

      複製一個目錄及文件【得自定義函數,不自帶】     

/**
 * 複製文件夾,生成另外一個文件夾
 * @param $fromDir ,被複制的源文件夾
 * @param $toDir,生成的文件夾名字
 */
function copyDir($fromDir,$toDir){
if(is_file($toDir))exit("目標地址不是文件夾");//不是文件夾返回提示
if(!file_exists($toDir))mkdir($toDir);//沒有建立目標文件夾,建立
$handle=opendir($fromDir);//打開文件夾
while($cur_name=readdir($handle)){
      $cur_path=$fromDir."/".$cur_name;//進入一層文件夾後,當前文件的路徑
$cur_to_path=$toDir."/".$cur_name;//要複製的造成的路徑
if($cur_name=="." || $cur_name=="..")continue;
if(is_file($cur_path)){
//如果文件複製當前文件到目的文件夾
copy($cur_path,$cur_to_path);
      }
if(is_dir($cur_path)){
//如果文件夾,複製該文件夾
copyDir($cur_path,$cur_to_path);
      }
   }
closedir($handle);//關閉文件夾
}
// copyDir($path,"test");
複製代碼

 

 

文件的基本操做
      2.fclose($handle)    //關閉打開的文件【返回BOOL】
file_put_contents($filename,$data);//它是上邊三個合起來的效果
.file_get_contents($filename)//讀取文件裏的信息【返回字符串】
      6.flock($handle,$operation)    //用$operation鎖定文件$handle
        
      1.copy($file1,$file2);//賦值$file1,造成$file2【返回BOOL】
      2.unlink($file);//刪除$file文件【返回BOOL】
      3.rename($file1,$file_new_name);//重命名【返回BOOL】
 
   文件的上傳
is_upload_file($_FILES['file']['tmp_name']) //檢查是否合法
       2.move_upload_file($_FILES['file']['tmp_name'],$url); //上傳合法文件到$url
 
 
   文件下載
         header('content-disposition:attachment;filename='.basename($filename));//表示附件方式下載
         header('content-length:'.filesize($filename));
         readfile($filename);
 
   
        2.mysql_select_db('data',$conn);//選擇數據庫名
        3.mysql_query('set names utf8');//設置編碼
    
        4.mysql_affect_array();//試返回值爲關聯/索引數組
        5.mysql_affect_row();//返回索引數組
        6.mysql_affect_assoc();//返回關聯數組
 
        7.mysql_num_rows();//返回上一次select的查詢語句條數
        8.mysql_affected_rows();//返回上一次insert,update,delete的數據條數
 
        9.mysql_close();//關閉數據庫

數學函數
    1.ceil()//向上取整
    2.floor()//向下取整
    3.round();//四捨五入
 
    5.rand(10,100)//隨機取值
    6.mt_rand(10,100)//隨機取值,算法不一樣,速度更快
    7.fmod()//返回除法浮點形餘數
    8.max(int/$arr)//取最大值
    9.min(int/$arr)//取最小值
    10.pow(1024,2)//返回1021的2次冪
 
 
2.time();//默認獲取當前時間,【返回時間戳格式】
3.micritime();//獲取當前時間【返回毫秒的時間戳】
4.mktime(H,i,s,m,d,Y)//指定時間轉爲時間戳,參數爲空的時候做用與time()相同【返回時間戳格式】
5.strtotime('2015-10-10 10:10:10');//指定時間轉換爲時間戳【返回時間戳】
6.date("Y-m-d H:i:s",time());//轉換時間戳爲日期格式【返回目標格式的字符串】
.parse_url($url)//返回該URL的全部信息,[query參數]  【返回含信息的數組】
pathinfo($url)//[["extension"文件後綴]【返回含信息的數組,下標不一樣】
4.get_meta_tags($url)//獲取該頁面的全部META標籤【返回關聯數組】


JSON
1.json_encode($data);//對變量進行JSON編碼
2.json_decode($data)//對JSON格式的字符串進行解碼
3.json_last_error();//返回最後一次反生的錯誤
返回字符串,此字符串包含了表示value 的字節流,能夠存儲於任何地方。
unserialize()//當序列化對象時,PHP 將試圖在序列動做以前調用。這樣就容許對象在被序列化以前作任何清除操做。相似的,當使用 unserialize() 恢復對象時, 將調用 成員函數。
相關文章
相關標籤/搜索