PHP面试中常见的面试试题与算法例子
本文章整理的PHP面试题目主要从两个方法来做,一个是字符串与文件的操作例子,另一个是常用的几种排序算法的例子,下面一起来看看。
下面是四道比较常见的题目,主要考察的是对字符串函数以及文件操作相关函数的掌握程度。
1、PHP翻转中文字符串
<?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.phprm.com天涯PHP博客'); ?>
//结果:'客博PHP涯天moc.ahphp.wwww'
2、PHP计算URL的文件后缀名
<?php function getext(http://pic4.phprm.com/2014/08/12/$url.jpg){ $data = parse_url($url); $path = $data['path']; $info = pathinfo($path); return $info['extension']; } echo getext('http://www.phprm.com/ '); ?>
//结果:'html'
3、PHP计算两个文件的相对路径
<?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遍历目录下的所有文件和文件夹
<?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、冒泡排序
<?php 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、归并排序
<?php 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、二分查找-递归
<?php 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、二分查找-非递归
<?php 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、快速排序
<?php 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、选择排序
<?php 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、插入排序
<?php 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; } ?>
当然还会有更多其它的像数据库操作或一些基本的函数使用例子,在此我们就不写了大家可在本地相关文章处找
本文地址:http://www.phprm.com/code/64877.html
转载随意,但请附上文章地址:-)