热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP面试中常见的面试试题与算法例子-PHP源码

本文章整理的PHP面试题目主要从两个方法来做,一个是字符串与文件的操作例子,另一个是常用的几种排序算法的例子,下面一起来看看。
本文章整理的PHP面试题目主要从两个方法来做,一个是字符串与文件的操作例子,另一个是常用的几种排序算法的例子,下面一起来看看。

下面是四道比较常见的题目,主要考察的是对字符串函数以及文件操作相关函数的掌握程度。

1、PHP翻转中文字符串

代码如下


function reverse($str){
$r = array();
for($i=0; $i $r[] = mb_substr($str, $i, 1, 'UTF-8');
}
return implode(array_reverse($r));
}
echo reverse('www.111cn.net天涯PHP博客');
//结果:'客博PHP涯天moc.ahphp.wwww'

2、PHP计算URL的文件后缀名

代码如下

function getext($url){
$data = parse_url($url);
$path = $data['path'];
$info = pathinfo($path);
return $info['extension'];
}
echo getext('http://www.111cn.net/ ');
//结果:'html'

3、PHP计算两个文件的相对路径

代码如下

function getrpath($path, $conpath){
$pathArr = explode('/', $path);
$cOnpathArr= explode('/', $conpath);
$dismatchlen = 0;
for($i=0; $i if($conpathArr[$i] != $pathArr[$i]){
$dismatchlen = count($pathArr) - $i;
$arrleft = array_slice($pathArr, $i);
break;
}
}
return str_repeat('../', $dismatchlen).implode('/', $arrleft);
}
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/5.php';
echo getrpath($a, $b);
//结果:'../../../c/d/e.php'

4、PHP遍历目录下的所有文件和文件夹

代码如下
function finddir($dir){
$files = array();
if(is_dir($dir)){
if($handle = opendir($dir)){
while(($file = readdir($handle)) !== false){
if($file != '.' && $file != '..'){
if(is_dir(rtrim($dir, '/').'/'.$file)){
$files[$file] = finddir(rtrim($dir, '/').'/'.$file);
}else{
$files[] = rtrim($dir, '/').'/'.$file;
}
}
}
closedir($handle);
}
}
return $files;
}
print_r(finddir('F:/Golang/src'));
//结果:
Array
(
[0] => F:/Golang/src/hello.go
[1] => F:/Golang/src/src.exe
[test] => Array
(
[0] => F:/Golang/src/test/sss.txt
)

)

除了这些字符串、文件操作的基本函数考察外,基础算法也是面试中考察比较多的,具体请看以前总结的关于PHP基础算法的文章

下面分享一些最常见的算法,用PHP如何实现。

1、冒泡排序

代码如下

function bubble_sort($arr) {
$n=count($arr);
for($i=0;$i<$n-1;$i++){
for($j=$i+1;$j<$n;$j++) {
if($arr[$j]<$arr[$i]) {
$temp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$temp;
}
}
}
return $arr;
}

2、归并排序

代码如下

function Merge(&$arr, $left, $mid, $right) {
$i = $left;
$j = $mid + 1;
$k = 0;
$temp = array();
while ($i <= $mid && $j <= $right)
{
if ($arr[$i] <= $arr[$j])
$temp[$k++] = $arr[$i++];
else
$temp[$k++] = $arr[$j++];
}
while ($i <= $mid)
$temp[$k++] = $arr[$i++];
while ($j <= $right)
$temp[$k++] = $arr[$j++];
for ($i = $left, $j = 0; $i <= $right; $i++, $j++)
$arr[$i] = $temp[$j];
}

function MergeSort(&$arr, $left, $right)
{
if ($left <$right)
{
$mid = floor(($left + $right) / 2);
MergeSort($arr, $left, $mid);
MergeSort($arr, $mid + 1, $right);
Merge($arr, $left, $mid, $right);
}
}

3、二分查找-递归

代码如下

function bin_search($arr,$low,$high,$value) {
if($low>$high)
return false;
else {
$mid=floor(($low+$high)/2);
if($value==$arr[$mid])
return $mid;
elseif($value<$arr[$mid])
return bin_search($arr,$low,$mid-1,$value);
else
return bin_search($arr,$mid+1,$high,$value);
}
}

4、二分查找-非递归

代码如下
function bin_search($arr,$low,$high,$value) {
while($low<=$high) {
$mid=floor(($low+$high)/2);
if($value==$arr[$mid])
return $mid;
elseif($value<$arr[$mid])
$high=$mid-1;
else
$low=$mid+1;
}
return false;
}

5、快速排序

代码如下

function quick_sort($arr) {
$n=count($arr);
if($n<=1)
return $arr;
$key=$arr[0];
$left_arr=array();
$right_arr=array();
for($i=1;$i<$n;$i++) {
if($arr[$i]<=$key)
$left_arr[]=$arr[$i];
else
$right_arr[]=$arr[$i];
}
$left_arr=quick_sort($left_arr);
$right_arr=quick_sort($right_arr);
return array_merge($left_arr,array($key),$right_arr);
}

6、选择排序

代码如下

function select_sort($arr) {
$n=count($arr);
for($i=0;$i<$n;$i++) {
$k=$i;
for($j=$i+1;$j<$n;$j++) {
if($arr[$j]<$arr[$k])
$k=$j;
}
if($k!=$i) {
$temp=$arr[$i];
$arr[$i]=$arr[$k];
$arr[$k]=$temp;
}
}
return $arr;
}

7、插入排序

代码如下

function insertSort($arr) {
$n=count($arr);
for($i=1;$i<$n;$i++) {
$tmp=$arr[$i];
$j=$i-1;
while($arr[$j]>$tmp) {
$arr[$j+1]=$arr[$j];
$arr[$j]=$tmp;
$j--;
if($j<0)
break;
}
}
return $arr;
}

当然还会有更多其它的像数据库操作或一些基本的函数使用例子,在此我们就不写了大家可在本地相关文章处找


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
author-avatar
mobiledu2502880317
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有