PHP常用函式歸類【持續整理】
學習了這麼久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__ 當前行數名稱
總結:
(全域性)常量:(預設常量就是全域性的)儲存在(靜態)資料段
變數
全域性變數:儲存在靜態資料段
區域性變數:儲存在棧中
靜態變數:(不管全域性/區域性)儲存在靜態資料段中
型別轉換
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();//判斷是否為有效函式名稱
運算子
算數運算子:+ - * / % ++ --
連線運算子: .
賦值運算子: =, +=,-=,*=,/=,%=,.=
比較運算子:>,,!==
邏輯運算子: and,&& ; or,|| ; not,! ; xor(邏輯異或,兩邊不同返回TRUE,相同返回FALSE)
位運算子 : & ;|;^(異或,不同返回1);~(非運算子,1.0取反);>右移左邊空出的補0
其他運算子:
?: 三目運算子 舉例:$a=$bool?$b:$c; //若$bool成立,$a=$b;否則$a=$c
@ 忽略錯誤
=>陣列下標用
->呼叫物件值用
·· 反引號為執行運算子??
instanceof 型別運算子 class ClassOne{} $a=new ClassOne(); var_dump( $a instanceof ClassOne );//返回true
流程控制
1.if(){}else{}
2.while(){};
3.do{}while();$
4.for($a=1;$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 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.回撥函式
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
5.strnatcmp($str1,$str2);//按自然數的排序比較,上邊的比較102,按自然數大小來的
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 實體】,&轉換成&
htmlspecialchars_decode($str);//把【HTML實體】轉換成【預定義字元】,&轉換成&
2.htmlentities($str);,函式把【預定義字元】轉換為【 HTML 實體】,&轉換成&,有亂碼問題,注意第二第三個引數,若編碼不正確,會在實體化時把資訊丟失
html_entity_decode($str)////把【HTML實體】轉換成【預定義字元】,&轉換成&, > 轉成
3.addslashes($html); //新增跳脫字元“/”
stripslashes($html); //刪除跳脫字元“/”
5.nl2br($str) //在$str中的換行/n前插入
,因為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,生成TABLEfunction menu_list($root_path){ $num=0;//儲存條數 $dir_handle=opendir($root_path);echo "
檔名 | 型別 | 大小 | 建立時間 | ";echo "
{$file_name} | ";echo "{$cate} | ";echo "".filesize($cur_path)." | ";echo "".date("Y-m-d H:i:s",filectime($cur_path))." | ";echo "
檔案總數為:{$num}個 |
";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 將試圖在序列動作之前呼叫。這樣就允許物件在被序列化之前做任何清除操作。類似的,當使用 恢復物件時, 將呼叫 成員函式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2809212/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP的常用函式 持續更新PHP函式
- 前端常用的工具類函式, 持續更新中前端函式
- Python3常用函式速查【持續更新】Python函式
- go 常用包整理 (持續更新)Go
- 常用函式整理函式
- 【少用會忘】PHP 函式筆記(持續更新)PHP函式筆記
- 持續記函式函式
- PHP 常用函式PHP函式
- PHP常用函式PHP函式
- Linux常用命令整理-持續更新Linux
- SQL Server常用函式整理SQLServer函式
- PHP常用函式大全PHP函式
- PHP常用函式篇PHP函式
- Carbon 類常用函式函式
- PHP:常用PHP陣列操作函式PHP陣列函式
- PHP常用函式總結PHP函式
- PHP 常用函式彙總PHP函式
- PHP 陣列常用函式PHP陣列函式
- PHP 自定義函式用法及常用函式集合PHP函式
- 前端常用的 59 個工具類【持續更新】前端
- Golang實現PHP常用函式GolangPHP函式
- Go實現PHP常用函式GoPHP函式
- PHP 函式庫 1 - 函式庫的分類PHP函式
- [持續更新]——關於C++的一些可能會常用的函式C++函式
- 資料分析中常用小函式彙總【持續更新,個人筆記。。。】函式筆記
- PHP常用符號和函式收藏PHP符號函式
- 100個PHP最常用的函式PHP函式
- PHP經常用到的函式大全PHP函式
- 100 個最常用的 PHP 函式PHP函式
- php開發常用函式總結PHP函式
- js正規表示式常用函式詳解(續)JS函式
- php常用函式彙總.以備查.PHP函式
- PHP最常用函式TOP100(翻譯)PHP函式
- 7.PHP陣列和字串常用函式PHP陣列字串函式
- 讓你瞬間提高工作效率的常用js函式彙總(持續更新)JS函式
- 技術乾貨:Java程式碼常用工具類整理歸納Java
- Python Redis常用操作(持續更新)PythonRedis
- qt -- QString類及常用函式功能的使用QT函式