<?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/>";
}
}
}

php里面的一些面试经典的函数的更多相关文章

  1. 面试经典算法题集锦——《剑指 offer》小结

    从今年 3 月份开始准备找实习,到现在校招结束,申请的工作均为机器学习/数据挖掘算法相关职位,也拿到了几个 sp offer.经历这半年的洗礼,自己的综合能力和素质都得到了一个质的提升. 实话说对于未 ...

  2. 另类加法 牛客网 程序员面试经典 C++ Python

    另类加法  牛客网 程序员面试经典 C++ Python 题目描述 请编写一个函数,将两个数字相加.不得使用+或其他算数运算符. 给定两个int A和B.请返回A+B的值 测试样例: 1,2 返回:3 ...

  3. 大公司面试经典数据结构与算法题C#/Java解答

    几个大公司(IBM.MicroSoft and so on)面试经典数据结构与算法题C#解答 1.链表反转 我想到了两种比较简单的方法 第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表 ...

  4. 10 个经典PHP函数

    这篇文章主要介绍了php中的10个比较经典的函数,不太常见,可以满足有特殊需求的朋友 1. sys_getloadavg() sys_getloadavt()可以获得系 统负载情况.该函数返回一个包含 ...

  5. 面试经典-设计包含min函数的栈

    问题:设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素. 要求函数min.push以及pop的时间复杂度都是O(1). 解答:push 和pop的时间复杂度 ...

  6. c/c++笔试面试经典函数实现

    /* strcpy函数实现 拷贝字符串 */ char* Strcpy(char* dst, char* src) { assert(dst != NULL && src != NUL ...

  7. 【面试】shuffle函数的实现

    一.前言 有位同学面试的时候被问到shuffle函数的实现,他之后问我,我知道这个函数怎么用,知道是对数组(或集合)中的元素按随机顺序重新排列.但是没有深入研究这个是怎么实现的.现在直接进入JDK源码 ...

  8. Javascript:面试经典套路-查重(reduce)

    今天在偶然间查看到了一段代码,代码使用了很短的篇幅完成了字符串统计相同字符次数这个经典面试题,其中用到了reduce这个方法,网上查了查,没有查到什么有价值的东西,导致浪费了我一些时间才看懂,现将我的 ...

  9. 经典Hash函数的实现

    Hash函数是指把一个大范围映射到一个小范围.把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存. 除此以外,Hash函数往往应用于查找上.所以,在考虑使用Hash函数之前,需要明白它 ...

随机推荐

  1. 深入JVM内核--GC算法和种类

    GC的概念 Garbage Collection 垃圾收集 1960年 List 使用了GC Java中,GC的对象是堆空间和永久区 引用计数法 老牌垃圾回收算法 通过引用计算来回收垃圾 使用者 CO ...

  2. seckill

    京东自动登录 注:本文所做操作皆以京东web为例 包含:xpath,splinter,ocr 遇到的坑: 登录页面通过查看网页元素,能看到账户,密码唯一id,但是执行 12 browser.fill( ...

  3. Win32双缓冲画图原理

    网上有许多文章讲述了如何使用Visual C++程序实现双缓冲,都是用C++面向对象语言写的,可能对很多没有接触过面向对象语言的C语言初学者来说理解起来有些困难,并且有些好心人也只是把源代码贴上去,不 ...

  4. Nginx笔记总结六:Nginx location配置

    语法规则:location [= | ~ | ~* | ^~] /uri/ {....} = 表示精确匹配 ^~ 表示uri以某个常规字符串开头 ~ 表示区分大小写的正则表达式 ~* 表示不区分大小写 ...

  5. 国产ROM纷争升级 能否诞生终结者?

    能否诞生终结者?" title="国产ROM纷争升级 能否诞生终结者?"> 相比iOS系统的低硬件高流畅,安卓系统就显得"逼格"低了许多.先不说 ...

  6. 全文检索ElasticSearch的简单使用笔记

    工具:kibana GET _search { "query": { "match_all": {} } } #创建索引结构 PUT sku { "m ...

  7. win7电脑磁盘文件以分组方式展现解决方案

    问题: win7电脑磁盘文件以分组方式展现,具体如下: 解决: 右键磁盘空白处-->分组依据-->选择无:图解如下:

  8. 吴裕雄--天生自然 R语言数据分析:火箭发射的地点、日期/时间和结果分析

    dfS = read.csv("F:\\kaggleDataSet\\spacex-missions\\database.csv") library(dplyr) library( ...

  9. Java 关于线程的面试题及答案

    一.职场可能碰到的关于线程的面试题: 1. 什么是线程? 线程是程序中一个单一的顺序控制流程.进程内有一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位. ...

  10. Emacs key bindings for vim users

    Emacs key bindings for vim users | Scarletsky 盒子 盒子 博客 分类 标签 关于 RSS 搜索 文章目录 简介 Emacs 是一个文本编辑器,号称是伪装成 ...