php常用函数最全总结
PHP常用函數總結
| global與static變量 (面試題) | global:[用于在函數內使用全局變量+值不變]在php中function體內無法使用全局變量,如果要使用的話,需要使用global關鍵字先聲明在使用 static:[用于保留局部變量一直存在+值可變]當函數運行完畢時,函數內的變量都會被消除,如果還需要使用不希望被刪除的話,使用static關鍵字。僅在第一次聲明變量的時候使用。 $count = 5; |
| (字符串ascii碼|url|變量)與數組的轉換 | explode與implode區別,chr(83)與ord('S')區別,parse_url+parse_str與http_build_query區別,extract與compact區別 |
| 反轉 | 字符串反轉strrev,數組反轉array_reserve,array_flip |
| 截取與替換 | 字符串的截取substr與替換substr_replace,str_replace區別,數組的截取array_slice與替換array_splice區別 其中,substr_replace('abcdef', '###', 1, 2);//輸出 a###def? ? ? str_replace("world", "earth", "Hello world!");//輸出 Hello earth! array_slice原數組不受任何影響,但是array_splice原數組會真的被切去一部分,在切去部分前面插入補足的部分 |
| 分割與填充 | 字符串的分割str_split,chunk_split與填充str_pad區別,數組的分割array_chunk與填充array_pad區別, 其中,分割:chunk_split('abcdef',2,',')與array_chunk($arr,2),填充:str_pad($str,$len,'0',STR_PAD_LEFT)與array_pad($arr, 5, 'a'); |
| 數組的操作對比 | array_walk與array_map3個區別 |
| 數組的排序 | sort,rsort與ksort,krsort與asort,arsort與natsort,natcasesort區別, 多維數組排序array_multisort($col,SORT_REGULAR,$arr) |
| 數組的并差交 | 數組并集array+array,array_merge,array_combine的區別,差集array_diff與交集array_intersect |
| 數組的增刪元素 | 數組頭的插入array_unshift與移除array_shift,數組尾的插入array_push與移除array_pop |
| 字符串首字母大寫 | ucfirst,lcfirst,ucwords,lcwords,strtoUpper,strtoLower區別 |
| 字符串模式匹配 | preg_match($pattern,$input,$output)與preg_match_all($pattern,$input,$output) |
| 文件與目錄 | php操作文件:fopen/fclose,is_file,fgets,fread/fwrite php操作目錄:opendir/closedir,is_dir,readdir |
問題1? ?( $key??'默認值' ) 與 ( !empty($key)?$key:'默認值' ) 的區別
答:前者還要$key只要!=null,都能取得到, ??就相當于isset()
問題2? ??: 與 ??的區別(php取數組中不存在的屬性_wuhuagu_wuhuaguo的博客-CSDN博客_php數組不存在)
答:安全的獲取數組屬性,有2種方式,一種是$a['a1']??'' ,一種是!empty($a['a2'])?$a['a2']:''
問題3? ?==與===的區別
答:==是比較兩者的數值是否相同,===比較兩者的類型和數值是否相同
問題4? ?判斷是否是一維數組
count($param) == count($param,1)問題5? ?獲取13位毫秒時間戳
//microtime()='0.79025500 1584618180',microtime(true)=1584618180.7903 //在32位系統中php的int最大值遠遠小于毫秒數,所以不能使用int類型,而php中沒有long類型,所以只好使用浮點數來表示。由于使用了浮點數,如果精度設置不對,使用echo顯示獲取的結果時可能會不正確,要想看到輸出正確的結果,精度設置不能低于13位。 $micro13Time = (float)sprintf('%.0f', floatval(microtime(true)*1000));問題6? ?獲取url中的后綴名,如.php
$urlArr = parse_url($bpmFileUrl); $basename = basename($urlArr['path']??''); $suffix = substr($basename, strpos($basename, '.'));問題7? ?判斷{函數/類/方法/屬性}是否存在(滴滴面試題)
//(1)判斷類是否存在
bool class_exists(string $class_name [, bool $autoload = true])
//(2)判斷系統函數或自己寫的函數是否存在
bool function_exists(string $function_name)?
//(3)判斷類里面的某個方法是否已經定義
bool method_exists(mixed $object, string $method_name)?
//(4)判斷類里面的某個屬性是否已經定義
bool property_exists(mixed $class, string $property)
問題7? ?PHP foreach的坑(百度面試題)
$test = [1,2,3,4]; foreach ($test as &$v) {}? echo json_encode($test); echo '<hr>'.$v.'<hr>'; foreach ($test as $v) {echo $v.'=>'.json_encode($test).'<hr>';} // [1,2,3,4] // 4 // 1=>[1,2,3,1] // 2=>[1,2,3,2] // 3=>[1,2,3,3] // 3=>[1,2,3,3]解釋:foreach通過引用&遍歷的時候,在遍歷結束之后,會產生一個隱藏的變量$v,該$v是數組最后一個元素的引用,$v和數組中的最后一個元素存在一個地址,其中的一個值發生變化,都會引起另外一個值的變化。
第二次遍歷用了同樣的迭代變量$v,在這次foreach迭代的過程中,$v的值不斷的被覆蓋。
第一次迭代,數組變化成 [1,2,3,1],第二次變化成 [1,2,3,2],… 一直到倒數第二次,數組變成了[1,2,3,3],導致了最后兩個元素相同,最后一次,3覆蓋3,迭代結束。最終結果=[1,2,3,3]
問題9? ?php5.6語法糖(...$args) ?func1(參數1,...[參數2,參數3,,,參數N]);
function add($a, $b, $c) {return $a + $b + $c; }$num=[2, 3];? echo add(1, ...$num);//6 //上面的第二個和第三個參數將會從b為2,$c為3)問題10? ?!empty()與isset()區別
| null | false | 0 | "" | [ ] | |
| !empty() | F | F | F | F | F |
| isset() | F | T | T | T | T |
問題11?重載 與 覆蓋(重寫) 的區別
重載是指不同的函數使用相同的函數名,但是函數的參數個數或類型不同。 調用的時候根據函數的參數來區別不同的函數。?
覆蓋(重寫)是指在派生類中重新對基類中的虛函數(注意是虛函數)重新實現。 即函數名和參數都一樣,只是函數的實現不一樣。
問題12 array_column
$arr = [['id'=>1, 'name'=>'zs', 'sex'=>'man', 'grade'=>'100'],['id'=>2, 'name'=>'wl', 'sex'=>'female', 'grade'=>'90'], ]; $b = array_column($arr, null, 'id');//仍然是二維數組 // [ // '1' => ['id'=>1, 'name'=>'zs', 'sex'=>'man', 'grade'=>'100'], // '2' => ['id'=>2, 'name'=>'wl', 'sex'=>'female', 'grade'=>'90'], // ]$c = array_column($arr, 'name', 'id');//一維數組 // [ // '1' => 'zs', // '2' => 'wl', // ]?
常用函數
??? echo()【語言結構】
??? print()//【語言結構】【有返回值】,若傳輸失敗導致沒有輸出,它返回false
??? var_dump()
??? var_export()【有返回值,翻譯一個合法的PHP代碼】
??? printf()//類似與C語言的形式 printf("my name is %s, age %d", $name, $age);,打印出來
??? sprintf()//跟printf相似,但不打印,而是返回格式化后的文字,其他的與printf一樣
----------------------------------------------------------------------------------------------------------------------------------------------------------
數組函數
1.排序類:【1.無返回值,傳值引用,就直接對原數組進行了修改】
sort() 函數用于對數組單元從低到高進行排序。
rsort() 函數用于對數組單元從高到低進行排序。
ksort() 函數用于對鍵名從低到高進行排序并保持索引關系。
krsort() 函數用于對鍵名從高到低進行排序并保持索引關系。
asort() 函數用于對數組單元從低到高進行排序并保持索引關系。
arsort() 函數用于對數組單元從高到低進行排序并保持索引關系。
natsort() 函數用于對數組單元從低到高進行區分大小寫的排序并保持索引關系。
natcasesort() 函數用于對數組單元從低到高進行不區分大小寫的排序并保持索引關系。大寫在前,小寫在后。
usort($arr,"strnatcmp") 回調類的排序,把$arr數組里的每一個元素丟到strnatcmp()[非自然數排序]處理【返回新的排序數組】
==>sort,rsort與ksort,krsort asort,arsort natsort,natcasesort區別:
1組與234組比較:第1組拋棄鍵名,后234組保留鍵名
2組與34組比較:第2組按照鍵名排序,第34組按照鍵值排序
3組與4組比較:第3組按照鍵值排序,第4組按照鍵值ASCII碼自然排序
//根據時間對多維數組排序
$a=array(array('name'=>'zs','time'=>'2017-10-25 12:04:13'),array('name'=>'l s','time'=>'2017-10-25 12:34:13'),array('name'=>'ww','time'=>'2017-10-23 12:34:13') ); foreach($a as $key=>$val) $t[]=date('YmdHis',strtotime($val['time'])); array_multisort($t,SORT_DESC,$a); // print_r($a);2.鍵值操作類:【都有返回值,沒有在原來參數上修改】
??????? 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是否保留原來鍵值【返回新關聯/索引數組】
??????? 9.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】
??????? 3.array_map("function",$arr,$arr2,$arr3,....);//把所有數組返回到回調函數統一處理,【返回數組】
??????? 4.array_reduce($arr,myfunction[,initial]):把一維數組$arr中的值依次傳到自定義函數myfunction($v1,$v2)的v2上,v1為累加值類似 ? ? ? ? 于( .= ),[如果有initial,先把其當v1傳進去]【返回字符串】
============
array_walk與array_map區別
php array_map與array_walk使用對比_wml-CSDN博客
(1)walk主要是對每個參數都使用一次你的回調函數,要的是處理的過程。map對每個參數都使用一次你的回調函數,主要是為了得到你的回調函數處理后的新數組,要的是結果。
(2)walk可以沒有返回值,它主要是要對數組內的每個值進行操作,操作結果影響原來的數組。map主要是對數組中的值進行操作后返回數組,以返回一個新數組。
(3)walk可以認為提供額外參數給回調函數,map不可以。
| array_walk | array_map |
| 面向過程,直接操作原數組 | 面向結果,返回新數組 |
| 數組在前,函數在后 | 函數在前,數組在后 |
| 函數可額外參數 | 數組可多個 |
2)有個需求,二維數組里的city與name不能同時重復。這樣就必須取內層每個數組的city和name。兒array_column只能取一個字段,想到用array_walk或者array_map
//方法1:array_walk $res = []; array_walk($list, function ($val,$key) use (&$res) {$res[] = [$val['city'], $val['name']]; }); if (count($res) != count(array_unique($res, SORT_REGULAR))) {echo '重復'; } else {echo '不重復'; }//方法2:array_map $res = []; array_map(function ($val) use (&$res) {$res[] = [$val['city'], $val['name']]; },$list); if (count($res) != count(array_unique($res, SORT_REGULAR))) {echo '重復'; } else {echo '不重復'; }
存在str_split,array_slice,array_splice,但是不存在array_split
array_slice和array_splice區別
都可以用于對數組取出一小段切片。不在于:array_slice原數組不受任何影響,但是array_aplice原數組會真的被切去一部分,在切去部分前面插入補足的部分。
$input = array("a", "b", "c", "d", "e"); $output = array_slice($input, 2); // returns "c", "d", and "e" $output = array_slice($input, -2, 1); // returns "d" $output = array_slice($input, 0, 3); // returns "a", "b", and "c" $output = array_slice($input, 2, -1); // array(0 => 'c', 1 => 'd'); $output = array_slice($input, 2, -1, true); // array(2 => 'c', 1 => 'd');$input = array("red", "green", "blue", "yellow"); $output = array_splice($input, 2); var_dump($input, $output);echo '<hr>'; // $input變為 array("red", "green") // $output變為 array("blue", "yellow") $input = array("red", "green", "blue", "yellow"); $output = array_splice($input, 1, -1); var_dump($input, $output);echo '<hr>'; // $input變為 array("red", "yellow") // $output變為 array("green", "blue") $input = array("red", "green", "blue", "yellow"); $output = array_splice($input, 1, count($input), "orange"); var_dump($input, $output);echo '<hr>'; // $input變為 array("red", "orange") // $output變為 array("green", "blue", "yellow") $input = array("red", "green", "blue", "yellow"); $output = array_splice($input, -1, 1, array("black", "maroon")); var_dump($input, $output);echo '<hr>'; // $input為 array("red", "green", "blue", "black", "maroon") // $output變為 array("yellow") $input = array("red", "green", "blue", "yellow"); $output = array_splice($input, 3, 0, "purple"); var_dump($input, $output);echo '<hr>'; // $input為 array("red", "green", "blue", "purple", "yellow"); // $output變為 array()chr與ord的區別
chr():ASCII碼轉字符串,//$str1=chr(88);返回值為X?
ord():字符串轉ASCII碼,//$str2=ord('S');返回值為83?
str_split,explode與implode區別,extract與compact區別
數組和字符串:str_split,explode-拆,implode-合 。str_split無分隔的字符串拆分成數組,explode有分隔的字符串拆分成數組
數組和變量:extract拆,compact-合
$arr = ['zs' => '章三','ls' => '李四', ]; $result = extract($arr); echo $zs;echo '<hr>';echo $ls;echo '<hr>';//$zs='章三',$ls='李四'$a = 'php是最好的語言'; $b = 'java能改變世界'; $result = compact('a','b'); var_dump($result);die; // 結果=array( // 'a' => string 'php是最好的語言' // 'b' => string 'java能改變世界' // )ucfirst,lcfirst,ucwords,lcwords,strtoUpper,strtoLower區別
ucfirst() - 把字符串中的首字符轉換為大寫
lcfirst() - 把字符串中的首字符轉換為小寫
ucwords() - 把字符串中每個單詞的首字符轉換為大寫
lcwords() - 把字符串中每個單詞的首字符轉換為小寫
strtoupper() - 把字符串轉換為大寫
strtolower() - 把字符串轉換為小寫
數組開頭元素的插入array_unshift與移除array_shift
數組末尾元素的插入array_push與移除array_pop
http_build_query 與 parse_url+parse_str
http_build_query ? ? ? 數組轉字符串
parse_url+parse_str ? ?字符串轉數組
? 5.拆分,合并,分解,接合數組
截取字符串substr 與 替換字符串substr_repalce,str_replace
substr('abdcf', 1, 2);//輸出 bd?
substr_replace('abcdef', '###', 1, 2);//輸出 a###def
str_replace("world", "earth", "Hello world!");//輸出 Hello earth!
截取數組array_slice 與 替換數組array_splice
array_slice($arr,1[,2]);//在$arr中,從第二個開始取[,返回倆個值]【返回新數組(對原數組無影響),鍵值保留】
array_splice($arr,1[,2,"aaa","bb"]);//刪除或替換,從$arr第二個開始取,刪除或替換2個值【返回值為新數組,拆掉原數組】
分割array_chunk與填充array_pad????????
array_chunk($arr,2)//分割數組,把$arr按照【2個為一組】均等分割【返回一個二維數組】
array_pad($arr, 5, 'a');?//用指定個數的指定元素填充數組,若$a=['c','z']; 結果=['c','z','a','a','a']
字符串反轉strrev 與?數組反轉array_reserve,array_flip
array_reserve是鍵名的反轉,array_flip是鍵名和鍵值的反轉?
strrev('abcdf');//fdcba?
array_reverse(['a'=>'aaa','b'=>'bbb']);//['b'=>'bbb','a'=>'aaa']
array_flip(['a'=>'aaa','b'=>'bbb']);//['aaa'=>'a','bbb'=>'b']
字符串分割str_split,chunk_split 與 數組分割array_chunk
字符串分割str_split是分割成字符數組,chunk_split是按照分隔符分隔生成新字符串
str_split('abcdef');//['a','b','c','d','e','f']
chunk_split('abcdef',2,',');//'ab,cd,ef,'
array_chunk(['a','b','c','d','e','f'],3);//[['a','b','c'],['d','e','f']]
并集array+array,array_merge,array_combine的區別
array_combine($arr1,$arr2);//數組$arr1為KEY,$arr2為VALUES結合形成新索引數組【返回索引數組】
array+array,array_merge的區別
1)鍵名為數字時,array_merge()不會覆蓋掉原來的值,但+合并數組則會把最先出現的值作為最終結果返回,而把后面的數組擁有相同鍵名的那些值“拋棄”掉(不是覆蓋)
2)鍵名為字符時,+仍然把最先出現的值作為最終結果返回,而把后面的數組擁有相同鍵名的那些值“拋棄”掉,但array_merge()此時會覆蓋掉前面相同鍵名的值
差集array_diff與交集array_intersect
array_diff($arr1,$arr2)//返回兩數組的差集,返回的值為第一個數組的值,鍵值不變
array_intersect($arr1,$arr2)//返回兩個數組的交集,鍵值不變
? 6.數組的數據結構【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&
????????? 例:$c="http://test.www.com?".http_build_query(array("name"=>"zs","pwd"=>"123"));
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
字符串函數
?????? 返回bool
??????????? 1.isset($a)//當$a=NULL 或不存在,返回false,反之為true
??????????? 2.empty($a)//當$a=NULL/''/array()/0/'0'/不存在 時 返回true,反之為false
??????? 返回值為自字符
??????????? 1.substr(字符串,開始地方,[返回字符串的長度]);// 截取字符串的一部分,第一個字符位置為0
??????????? 2.substr_replace($str,"aaa",start[,length]);在$str上操作,從第start個開始,把【后邊】的字符[全/或length個]替換
??????????? 3.sub_count($str,"is"[,5,10]);//[ 從第五個字符開始,搜索長度為10,]搜索is在$str中出現的次數,【返回次數】
??????????? 4.strstr($email,"@"[,true])??? //從頭開始搜索,無true返回@后邊字符,有true返回@前邊的字符[strrchr對比]
??????????? 5.strrchr($email,"@")//從結尾開始搜索,返回@后的所有字符
??????????? 6.str_replace(被替換詞,替換詞,被搜索字符串,[統計替換次數$num])?? 前兩個參數也可為數組,兩個數組元素個數相同
??????????? 7.str_repeat($str,num);//重復$str字符串 num次,
????????? 返回值為數字類的
???????????? 1.strpos($str,"@");//返回@【第一次出現的位置】
???????????? 2.strrpos($str,"@");//返回@【最后一次出現的位置】
???????????? 3.str_word_count($str[,0/1/2]);
??????????????????? //返回$str中單詞的數量[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()//字母全轉為小寫【返回全小寫字符串】
??????????? 3.strtotime('2015-10-10 10:10:10');//指定時間轉換為時間戳【返回時間戳】
??????????? 4.str_pad($str,length,[---,STR_PAD_BOTH]); //在$str的兩邊填補“---“,注意,length若小于$str長度,不填補?? ?
??????????? 5.trim($str[,"a",STR_PAD_BOTH])// 去除兩邊/左/右的空白或"a",默認是空白,或自定義字符
??????????? 6.floatval("123.45aa")//=》獲取變量的浮點值【123.45】
??????????? 7.ucfirst()//整個$str首字母大寫
??????????? 8.ucword()//$str每個單詞首字母大寫
??????? HTML類處理
??????????? 1.htmlspecialchars($str)//函數把【預定義字符】轉換為【 HTML 實體】,&轉換成&
????????????? htmlspecialchars_decode($str);//把【HTML實體】轉換成【預定義字符】,&轉換成&
??????????? 2.htmlentities($str);,函數把【預定義字符】轉換為【 HTML 實體】,&轉換成&,有亂碼問題,注意第二第三個參數,若編碼不正確,會在實體化時把信息丟失
?????????????? html_entity_decode($str)把【HTML實體】轉換成【預定義字符】,&轉換成&,? > 轉成 <
??????????? 3.addslashes($html);?????????????? //添加轉義字符“/”
?????????????? stripslashes($html);???????????????? //刪除轉義字符“/”
??????????? 4.strip_tags($html);???????????????????? //去除HTML標簽
??????????? 5.nl2br($str)??????????????????????????????? //在$str中的換行/n前插入<br>,因為\n在源碼可以換行,但是在瀏覽器窗口不行,有這個就可以
??????????? 6.iconv( from_charset ; to_charset,$str);??????? //轉化字符格式???? $file_name = iconv("gb2312","utf-8",$file_name);
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
正則函數[原則,能用字符串函數解決不用正則,速度問題]
??????? 字符串的匹配查找
??????????? 1.preg_match($pattern,$subject,$arr);//按正則$pattern處理$subject,第一次匹配結果返回到數組中【函數的返回值為匹配次數】
??????????? 2.preg_match_all($pattern,$subject,$arr)//按正則$pattern處理$subject,全部匹配結果返回到數組中【函數的返回值為匹配次數】
??????????? 3.strstr($str,"@"[,true]);
??????????? 4.strpos,strrpos,substr($str,position)//聯合使用
???????? 字符串的替換
??????????? 1.preg_replace($patten,$replace,$str);//【強大的字符串處理函數】
??????????????????????? 在$str中,把$parrern匹配的值替換成$replcae【返回值為處理后的字符串】
??????????? 2.str_replace($find,$replace,$str);//把$str中的$find換成$replace
???????? 字符串的分割和鏈接
??????????? 1.preg_split($pattern,$str);通過一個正則表達式分隔字符串【返回值為數組】?????????????????????? ?
??????????????????????? 舉例:$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
??????????? 結果Array([0] => hypertext,[1] => language[2] => programming)
??????????? 2.explode(",",$str[,$limit_num]);//把$str按照","分割成一個數組[可選參數為返回數組的元素個數]【返回一個分割后的數組】
??????????? 3.impolde("+",$arr);//把$arr里的元素按照“+”鏈接成一個字符串
常用正則匹配詳見:常用正則表達式_wuhuagu_wuhuaguo的博客-CSDN博客
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
文件處理函數
[$file=c://php/index.php]
1.file_exists($file)//文件是否存在,【true/false】
2.filesize($file) ?//返回文件的大小【大小字節/出錯false】
3.is_readable($file)//是否可讀【返回bool】
4.is_writeable($file)//是否可寫【返回bool】
5.is_executable($file)//是否可執行【返回bool】
6.filectime($file)//文件創建時間【時間戳】
7.filemtime($file)//文件修改時間【時間戳】
8.fileatime($file)//文件訪問時間【時間戳】
9.stat($file)//返回文件的大部分信息【文件信息數組】
10.fopen($fileName,"模式字符r,w,x")//打開一個文件,【返回值為資源型$handle】
11.fclose($handle) ? ?//關閉打開的文件【返回BOOL】
12.fwrite($handle,"$data")//把$data寫入$handle文件,先清空后寫入,【成功返回$handle,失敗返回false】
13.file_put_contents($filename,$data);//它是上邊三個合起來的效果
14.file_get_contents($filename)//讀取文件里的信息【返回字符串】
15.flock($handle,$operation) ? ?//用$operation鎖定文件$handle,$operation取值有4種:
? ? LOCK_SH(PHP 4.0.1 以前的版本設置為 1):取得共享鎖定(讀取的程序)
? ? LOCK_EX(PHP 4.0.1 以前的版本中設置為 2):取得獨占鎖定(寫入的程序)
? ? LOCK_UN(PHP 4.0.1 以前的版本中設置為 3):釋放鎖定(無論共享或獨占)
? ? LOCK_NB(PHP 4.0.1 以前的版本中設置為 4):不讓 flock() 在鎖定時堵塞
16.copy($file1,$file2);//文件的復制。賦值$file1,形成$file2【返回BOOL】
17.unlink($file);//刪除$file文件【返回BOOL】
18.rename($file1,$file_new_name);//重命名【返回BOOL】
19.文件的上傳---注意:html:form: method="post" ;enctype="multipart/form-data"
is_upload_file($_FILES['file']['tmp_name']) //檢查是否合法
move_upload_file($_FILES['file']['tmp_name'],$url); //上傳合法文件到$url
20.文件的下載
header('content-disposition:attachment;filename='.basename($filename));//表示附件方式下載
header('content-length:'.filesize($filename));
readfile($filename);
//以下完成多人對同一文件的寫入---fopen,flock,fwrite,fclose $file = fopen("test.txt","w+”); //由于 flock() 需要一個文件指針, 因此可能不得不用一個特殊的鎖定文件來保護打算通過寫模式打開的文件的訪問(在 fopen() 函數中加入 "w" 或 "w+") if (flock($file,LOCK_EX)){// 排它性的鎖定 fwrite($file,"Write something"); flock($file,LOCK_UN);//釋放鎖 }else{ echo "Error locking file!"; } fclose($file);************************************************************************************************************************************************
目錄處理函數
1.basename($file) //返回文件名,index.php
2.dirname($file) ?//返回文件的路徑,c://php/
3.pathinfo($file) //返回該文件路徑的所有信息 ?["dirname"目錄名] ["basename"文件名] ["extension"文件后綴]
4.filesize($file) ?統計大小
5.mkdir("dir_name");//建立一個空的目錄
6.copy($org,$to) //復制
7.rmdir("dir_name");//刪除一個空的目錄
8.unlink("file_name")//刪除一個文件,當刪除目錄是,必須刪除該目錄下的文件
9.opendir($file) //打開一個目錄,參數為目錄名或目錄路徑【返回資源型的目錄句柄$dir_handle,無權限返false】
10.readdir($dir_handle) //讀取目錄,參數為目錄句柄,while,返回當前指向對象的名字,目錄指針后移【返回filename,沒有是返false】
11.is_dir($dir) //判斷是否是目錄
12.closedir($dir_handle) ?//關閉打開的目錄
13.rewinddir($dir_handle) //倒回目錄句柄,將目錄指針重置到目錄開始
例1:
<?php //返回一個目錄下的所有文件和子文件夾 //opendir readdir is_dir closedir function xf_scandir($dir) {$files = array();if( $handle=opendir($dir) ){ //$handle=Resource id #3while( ($file = readdir($handle)) != false ){ //echo $file;echo "<hr>"; //$file分別是 . .. a.php b.php cif( $file != ".." && $file != "." ){if( is_dir($dir . "/" . $file) ){ //文件夾c $files[$file] = xf_scandir($dir . "/" . $file); }else{ //文件a.php,b.php $files[] = $file; //var_dump($file);echo "<hr>";//分別是 a.php b.php}}}closedir($handle);return $files;} }$re=xf_scandir('D:\testscandir'); var_dump($re); /* array (size=3)0 => string 'a.php' (length=5)1 => string 'b.php' (length=5)'c' => array (size=2)0 => string 'c1.txt' (length=6)1 => string 'c2.doc' (length=6) */例2:
//寫出一個能創建多級目錄的PHP函數(新浪網技術部)---isdir,mkdir function create_dir($path,$mode = 0777) {//$path要創建的多級目錄,$mode創建目錄的模式,在windows下可忽略 if (is_dir($path)) { //如果目錄已經存在,則不創建 echo "該目錄已經存在"; } else { # 不存在,創建 if (mkdir($path,$mode,true)) { echo "創建目錄成功"; } else { echo "創建目錄失敗"; } } }例3:
// 遍歷文件夾$path,生成TABLE---opendir,readdir,filetype,iconv_change,filesize,filectime 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>"; }例4:
//刪除文件夾[也可以刪除文件] 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); }例5:
//統計目錄大小【得自定義函數,不自帶】 echo transform_unit(dirSize($path),"KB"); /** * 統計文件夾大小[也可以統計文件] * @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)){ $dir_size+=filesize($cur_path);//如果是文件,累加文件大小到file_size } if(is_dir($dir)){ $dir_size +=dirSize($cur_path);//如果是文件夾,累加文件夾大小到file_size } } 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 'TB':$data=$data/pow(1024, 4); } return round($data,2).$unit; }例6:
//復制一個目錄及文件【得自定義函數,不自帶】 copyDir($path,"test"); /** * 復制文件夾,生成另一個文件夾 * @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);//關閉文件夾 }--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL函數
??????? 1.mysql_connect('localhost',"root","root");//連接誒數據庫
??????? 2.mysql_select_db('data',$conn);//選擇數據庫名
??????? 3.mysql_query('set names utf8');//設置編碼
?? ?
? ? ??
? ? ? ? 4.mysql_affect_row();//返回索引數組
? ? ? ? 5.mysql_affect_assoc();//返回關聯數組
? ? ? ? 6.mysql_affect_array();//試返回值為關聯/索引數組
??????? 7.mysql_num_rows();//返回上一次select的查詢語句條數
??????? 8.mysql_affected_rows();//返回上一次insert,update,delete的數據條數
??????? 9.mysql_close();//關閉數據庫
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
數學函數
??? 1.ceil()//向上取整
??? 2.floor()//向下取整
??? 3.round();//四舍五入
??? 4.abs();//取絕對值
??? 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次冪
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
時間函數
1.date_default_timezone_set()('PRC');//設置時區為中國
?? date.timezone ="PRC";//PHP.INI
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());//轉換時間戳為日期格式【返回目標格式的字符串】
7.getdate()//獲取當前時間,【返回一個數組,參數年,月,日等都有】
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
URL處理函數
1.urlencode($url)//對該URL進行編碼;原因:防止亂碼,解決空格的呢個字符不能傳遞問題,form也是此編碼格式傳遞
2.urldecode($url)//對該URL進行解碼
3.parse_url($url)//返回該URL的所有信息,[scheme協議][host域名] [path路徑][query參數]? 【返回含信息的數組】
?? pathinfo($url)//["dirname"目錄名] ["basename"文件名] ["extension"文件后綴]【返回含信息的數組,下標不同】
4.get_meta_tags($url)//獲取該頁面的所有META標簽【返回關聯數組】
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JSON
1.json_encode($data);//對變量進行JSON編碼
2.json_decode($data,true)//對JSON格式的字符串進行解碼
3.json_last_error();//返回最后一次反生的錯誤
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
其他函數
sleep(10)//腳本執行到這里后,延遲10秒繼續執行
serialize()//返回字符串,此字符串包含了表示 value 的字節流,可以存儲于任何地方。
unserialize()//對單一的已序列化的變量進行操作,將其轉換回 PHP 的值。
????? 當序列化對象時,PHP 將試圖在序列動作之前調用該對象的成員函數 __sleep()。這樣就允許對象在被序列化之前做任何清除操作。類似的,當使用 unserialize() 恢復對象時, 將調用 __wakeup() 成員函數。
總結
以上是生活随笔為你收集整理的php常用函数最全总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核奔溃分析
- 下一篇: PHP函数漏洞学习