[php面试中常见的面试问题]PHP面试中常见的面试试题与算法例子

更新时间:2019-07-03    来源:php函数    手机版     字体:

【www.bbyears.com--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;
}

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

本文来源:http://www.bbyears.com/jiaocheng/56204.html