PHP面试中常见的面试试题与算法例子
发布时间:2022-06-30 09:28:10 所属栏目:PHP教程 来源:互联网
导读:本文章整理的PHP面试题目主要从两个方法来做,一个是字符串与文件的操作例子,另一个是常用的几种排序算法的例子,下面一起来看看,下面是四道比较常见的题目,主要考察的是对字符串函数以及文件操作相关函数的掌握程度. 1、PHP翻转中文字符串,代码如下: function
本文章整理的PHP面试题目主要从两个方法来做,一个是字符串与文件的操作例子,另一个是常用的几种排序算法的例子,下面一起来看看,下面是四道比较常见的题目,主要考察的是对字符串函数以及文件操作相关函数的掌握程度. 1、PHP翻转中文字符串,代码如下: function reverse($str){ $r = array(); for($i=0; $i<mb_strlen($str); $i++){ $r[] = mb_substr($str, $i, 1, 'UTF-8'); } return implode(array_reverse($r)); } echo reverse('www.phpfensi.com php粉丝网'); //结果:'php粉丝网 moc.phpfensi.wwww' 2、PHP计算URL的文件后缀名,代码如下: function getext($url){ $data = parse_url($url); $path = $data['path']; $info = pathinfo($path); return $info['extension']; } echo getext('http://www.phpfensi.com/ '); //结果:'html' 3、PHP计算两个文件的相对路径,代码如下: function getrpath($path, $conpath){ $pathArr = explode('/', $path); $conpathArr = explode('/', $conpath); $dismatchlen = 0; for($i=0; $i<count($pathArr); $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; } 当然还会有更多其它的像数据库操作或一些基本的函数使用例子,在此我们就不写了大家可在本站相关文章处找. (编辑:莆田站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |