php裡面的一些面試經典的函式
阿新 • • 發佈:2018-12-15
<?php
/*
這是一個多執行緒的讀取解決的函式
@param1 $fle 傳入要讀取的檔名
*/
function filelock($fle){
$fp=fopen($fls,'w+');//開啟檔案
if(flock($fp,LOCK_EX)){ //獨佔鎖定
fwrite($fp,"this is a filelock function");//進行寫入操作
flock($fp,LOCK_UN);//釋放鎖
}else{
echo "you can't do this because this file is useing";
}
fclose($fp);//關閉檔案
}
/*
這是一個獲取檔案字尾名的函式
@param1 $url 檔案路徑
*/
function getname($url){
$path_info=pathinfo($url);//獲取檔案路徑資訊得到的是個陣列陣列 裡面有四個值:dirname:檔案路徑 basename:檔名 extension:檔案字尾名 filename:檔案字首名
$extra_name=$path_info['extension'];
return $extra_name;
}
/*
斐波那契數列第n位是什麼,遞迴實現
斐波那契數列:每個數都等於前兩位相加 比如: 1 1 2 3 5 8 13....
@param int $n 位數
*/
function feibo($n){
$res=1;
if($n<=0){//判斷是否小於0
$res=0;
}elseif($n<=2){//判斷是否是前兩位
$res=1;
}else{
$res=feibo($n-2)+feibo($n-1);//從這裡開始遞迴
}
return $res;
}
/*
氣泡排序
@param $arr 傳入要排序的陣列
*/ function bubing($arr){ $count=count($arr); for($i=0;$i<$count-1;$i++){//外層迴圈控制排序的次數 for($j=0;$j<$count-$i-1;$j++){//內層迴圈控制比較的次數 if($arr[$j]>$arr[$j+1]){//如果前一個的值大於後一個的值就交換 $temp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$temp; } } } } /* 快速排序:通過一趟排序將要排序的資料分割成獨立的兩部分, 其中一部分的所有資料都比另外一部分的所有資料都要小, 然後再按此方法對這兩部分資料分別進行快速排序, 整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。 @param $arr 傳入要排序的陣列 */ function quickSort($arr){ if(count($arr)>=1){//判斷是否陣列長度是否大於一大於一才排序否則直接輸出 $count=count($arr);//獲取陣列長度 $left_arr=array();//定義一個空陣列 $right_arr=array(); $temp=$arr[0];//把陣列第一位數賦值給中間變數 for($i=1;$i<$count;$i++){//遍歷陣列 /* 把陣列內比第一個小的數 放在左邊的空陣列*/ if($arr[i]<$temp){ $left_arr[]=$arr[i]; }else{ /* 把陣列內比第一個大的數 放在右邊的空陣列*/ $right_arr[]=$arr[i]; } $right_arr=quickSort($right_arr);//遞迴繼續排序 $left_arr=quickSort($left_arr); return array_merge($left_arr,array($temp),$right_arr);//連線陣列 //使用array_merge這個函式的時候注意傳入的引數必須為陣列,否則最後連線的陣列位空 } }else{ return $arr; } } /* 獲取檔案的相對位置 重點是對這個函式的使用array_diff_assoc 算出兩個檔案的相對路徑,如 $a = "/a/b/c/d/e.php"; $b = "/a/b/12/34/c.php" 計算出 $a 相對於$b 的相對路徑應該是 "../../12/34/c.php" $param $a 檔名 $param $b 檔名
*/ function files($a,$b){ /* 開始時先判斷傳進來的引數是否位空 */ if(empty($a)||empty($b)){ return false; } $flag=""; $a1=explode('/',$a);//把$a檔名拆分成陣列 $b1=explode('/',$b);//把$b檔名拆分成陣列 $diff1=array_diff_assoc($a1,$b1);//比較兩個陣列之間的不同,第一次比較就是為了目錄的層級 for($i=0;$i<count($diff1)-1;$i++){//遍歷出a相對於b的上幾層目錄 $flag.="../"; } $diff2=array_diff_assoc($b1,$a1);//這次是為了得到檔名 $fileName=implode('/',$diff2);//合併陣列 return $flag.$fileName; } /* 遍歷資料夾 @param $data 資料夾名 */ function list_file($date){ //1、首先先讀取資料夾 $temp=scandir($date); //遍歷資料夾 foreach($temp as $v){ $a=$date.'/'.$v; if(is_dir($a)){//如果是資料夾則執行 if($v=='.' || $v=='..'){//判斷是否為系統隱藏的檔案.和.. 如果是則跳過否則就繼續往下走,防止無限迴圈再這裡。 continue; } echo "<font color='red'>$a</font>","<br/>"; //把資料夾紅名輸出 list_file($a);//因為是資料夾所以再次呼叫自己這個函式,把這個資料夾下的檔案遍歷出來 }else{ echo $a,"<br/>"; } } }
*/ function bubing($arr){ $count=count($arr); for($i=0;$i<$count-1;$i++){//外層迴圈控制排序的次數 for($j=0;$j<$count-$i-1;$j++){//內層迴圈控制比較的次數 if($arr[$j]>$arr[$j+1]){//如果前一個的值大於後一個的值就交換 $temp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$temp; } } } } /* 快速排序:通過一趟排序將要排序的資料分割成獨立的兩部分, 其中一部分的所有資料都比另外一部分的所有資料都要小, 然後再按此方法對這兩部分資料分別進行快速排序, 整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。 @param $arr 傳入要排序的陣列 */ function quickSort($arr){ if(count($arr)>=1){//判斷是否陣列長度是否大於一大於一才排序否則直接輸出 $count=count($arr);//獲取陣列長度 $left_arr=array();//定義一個空陣列 $right_arr=array(); $temp=$arr[0];//把陣列第一位數賦值給中間變數 for($i=1;$i<$count;$i++){//遍歷陣列 /* 把陣列內比第一個小的數 放在左邊的空陣列*/ if($arr[i]<$temp){ $left_arr[]=$arr[i]; }else{ /* 把陣列內比第一個大的數 放在右邊的空陣列*/ $right_arr[]=$arr[i]; } $right_arr=quickSort($right_arr);//遞迴繼續排序 $left_arr=quickSort($left_arr); return array_merge($left_arr,array($temp),$right_arr);//連線陣列 //使用array_merge這個函式的時候注意傳入的引數必須為陣列,否則最後連線的陣列位空 } }else{ return $arr; } } /* 獲取檔案的相對位置 重點是對這個函式的使用array_diff_assoc 算出兩個檔案的相對路徑,如 $a = "/a/b/c/d/e.php"; $b = "/a/b/12/34/c.php" 計算出 $a 相對於$b 的相對路徑應該是 "../../12/34/c.php" $param $a 檔名 $param $b 檔名
*/ function files($a,$b){ /* 開始時先判斷傳進來的引數是否位空 */ if(empty($a)||empty($b)){ return false; } $flag=""; $a1=explode('/',$a);//把$a檔名拆分成陣列 $b1=explode('/',$b);//把$b檔名拆分成陣列 $diff1=array_diff_assoc($a1,$b1);//比較兩個陣列之間的不同,第一次比較就是為了目錄的層級 for($i=0;$i<count($diff1)-1;$i++){//遍歷出a相對於b的上幾層目錄 $flag.="../"; } $diff2=array_diff_assoc($b1,$a1);//這次是為了得到檔名 $fileName=implode('/',$diff2);//合併陣列 return $flag.$fileName; } /* 遍歷資料夾 @param $data 資料夾名 */ function list_file($date){ //1、首先先讀取資料夾 $temp=scandir($date); //遍歷資料夾 foreach($temp as $v){ $a=$date.'/'.$v; if(is_dir($a)){//如果是資料夾則執行 if($v=='.' || $v=='..'){//判斷是否為系統隱藏的檔案.和.. 如果是則跳過否則就繼續往下走,防止無限迴圈再這裡。 continue; } echo "<font color='red'>$a</font>","<br/>"; //把資料夾紅名輸出 list_file($a);//因為是資料夾所以再次呼叫自己這個函式,把這個資料夾下的檔案遍歷出來 }else{ echo $a,"<br/>"; } } }