php里面的一些面试经典的函数

<?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/>";
}
}
}
posted @ 2018-12-15 21:21  yunhenX  阅读(448)  评论(0编辑  收藏  举报