当前位置:首页 > PHP教程 > php面试题 > 列表

PHP的文件操作与算法实现的面试题示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-16 10:48:21 浏览: 评论:0 

这篇文章主要介绍了PHP的文件操作与算法实现的面试题示例,选择了一些最具代表性和最基础的题目进行了归纳,需要的朋友可以参考下。

操作文件

1.使用5种以上的方式获取一个文件的扩展名

要求: dir/upload.image.jpg, 找出.jpg或者jpg

  1. <?php  
  2. /**  
  3.  * 五种方式获取指定路径的文件扩展名  
  4.  */ 
  5.    
  6. $str = "dir/upload.image.jpg";  
  7.    
  8. function one ($str)  
  9. {  
  10.   $arr = explode('.'$str);  
  11.   $count = count($arr);  
  12.      
  13.   return $arr[$count - 1];  
  14. }  
  15.    
  16. function two ($str)  
  17. {  
  18.   $len = strlen($str);  
  19.      
  20.   for ($i = $len - 1, $name = ''$str[$i] != '.'$i --) {  
  21.     $name .= $str[$i];  
  22.   }  
  23.   $name = strrev($name);  
  24.      
  25.   return $name;  
  26. }  
  27.    
  28. function three($str)  
  29. {  
  30.   $path = pathinfo($str);  
  31.      
  32.   return $path['extension'];  
  33. }   
  34.    
  35. function four($str)  
  36. {  
  37.   $arr = explode('.'$str);  
  38.      
  39.   return array_pop($arr);  
  40. }  
  41.    
  42. function five($str)  
  43. {  
  44.   $start = strrpos($str'.');  
  45.      
  46.   return substr($str$start + 1);  
  47. }  
  48.    
  49. echo one($str);  
  50. echo "<br>";  
  51.    
  52. echo two($str);  
  53. echo "<br>";  
  54.    
  55. echo three($str);  
  56. echo "<br>";  
  57.    
  58. echo four($str);  
  59. echo "<br>";  
  60.    
  61. echo five($str);  
  62. echo "<br>";  

2.写一个php函数算出两个文件的相对路径。例如$a="/a/b/c/d/e.php"; $b="/a/b/12/34/c.php",B相对于A的相对路径是什么?

这道题目可以看成是求第一个公共节点的题目,网上流传的代码大部分是错的,考虑不周全,当然我这个也只是用“../”去表示,没用"./"

  1. <?php  
  2.    
  3. /**  
  4.  * 求$b相对于$a的相对路径  
  5.  * @param string $a  
  6.  * @param string $b  
  7.  * @return string  
  8.  */ 
  9. function getRelativePath ($a$b)  
  10. {  
  11.   $patha = explode('/'$a);  
  12.   $pathb = explode('/'$b);  
  13.      
  14.   $counta = count($patha) - 1;  
  15.   $countb = count($pathb) - 1;  
  16.      
  17.   $path = "../";  
  18.   if ($countb > $counta) {  
  19.     while ($countb > $counta) {  
  20.       $path .= "../";  
  21.       $countb --;  
  22.     }  
  23.   }  
  24.      
  25.   // 寻找第一个公共结点  
  26.   for ($i = $countb - 1; $i >= 0;) {  
  27.     if ($patha[$i] != $pathb[$i]) {  
  28.       $path .= "../";  
  29.       $i --;  
  30.     } else { // 判断是否为真正的第一个公共结点,防止出现子目录重名情况  
  31.       for ($j = $i - 1, $flag = 1; $j >= 0; $j --) {  
  32.         if ($patha[$j] == $pathb[$j]) {  
  33.           continue;  
  34.         } else {  
  35.           $flag = 0;  
  36.           break;  
  37.         }  
  38.       }  
  39.          
  40.       if ($flag)  
  41.         break;  
  42.       else 
  43.         $i ++;  
  44.     }  
  45.   }  
  46.      
  47.   for ($i += 1; $i <= $counta$i ++) {  
  48.     $path .= $patha[$i] . "/";  
  49.   }  
  50.      
  51.   return $path;  
  52. }  
  53.    
  54. $a = "/a/c/d/e.php";  
  55. $b = "/a/c.php";  
  56.    
  57. $path = getRelativePath($a$b);  
  58. echo $path;  

算法

1.使用PHP描述冒泡排序和快速排序,对象可以是一个数组

  1. <?php  
  2.    
  3. /**  
  4.  * 冒泡排序算法实现(从小到大)  
  5.  */ 
  6. function maopaoSort (&$array)  
  7. {  
  8.   $count = count($array);  
  9.      
  10.   for ($i = 0; $i < $count - 1; $i ++) {  
  11.     for ($j = 0; $j < $count - $i - 1; $j ++) {  
  12.       if ($array[$j] > $array[$j + 1]) {  
  13.         $tmp = $array[$j];  
  14.         $array[$j] = $array[$j + 1];  
  15.         $array[$j + 1] = $tmp;  
  16.       }  
  17.     }  
  18.   }  
  19. }  
  20.    
  21. /**  
  22.  * 快速排序  
  23.  */ 
  24. function pivotParation (&$array$start$end)  
  25. {  
  26.   $stand = $array[$start];  
  27.      
  28.   while ($start < $end) {  
  29.     while ($start < $end && $array[$end] >= $stand) {  
  30.       $end --;  
  31.     }  
  32.     if ($start < $end) {  
  33.       $array[$start ++] = $array[$end];  
  34.     }  
  35.        
  36.     while ($start < $end && $array[$start] <= $stand) {  
  37.       $start ++;  
  38.     }  
  39.     if ($start < $end) {  
  40.       $array[$end --] = $array[$start];  
  41.     }  
  42.   }  
  43.      
  44.   $array[$start] = $stand;  
  45.      
  46.   return $start;  
  47. }  
  48.    
  49. function quickSort (&$array$begin$end)  
  50. {  
  51.   if ($begin < $end) {  
  52.     $pivot = pivotParation($array$begin$end);  
  53.     quickSort($array$begin$pivot - 1);  
  54.     quickSort($array$pivot + 1, $end);  
  55.   }  
  56. }  
  57.    
  58. $arr = array(  
  59.     5,  
  60.     1,  
  61.     3,  
  62.     2,  
  63.     19,  
  64.     11,  
  65.     25,  
  66.     12,  
  67.     100,  
  68.     10000,  
  69.     12  
  70. );  
  71.    
  72. // 冒泡排序  
  73. maopaoSort($arr);  
  74. print_r($arr);  
  75. echo "<br>";  
  76.    
  77. // 快速排序  
  78. $count = count($arr);  
  79. quickSort($arr, 0, $count - 1);  
  80. print_r($arr);  

2.使用php描述顺序查找和二分查找

  1. <?php  
  2.    
  3. /**  
  4.  * 顺序查找  
  5.  */ 
  6. function seqSearch ($arr$needle)  
  7. {  
  8.   for ($i = 0, $len = count($arr); $i < $len$i ++) {  
  9.     if ($arr[$i] == $needle) {  
  10.       return $i;  
  11.     }  
  12.   }  
  13.   return - 1;  
  14. }  
  15.    
  16. /**  
  17.  * 二分查找  
  18.  */ 
  19. function midSearch ($arr$start$end$needle)  
  20. {  
  21.   while ($start <= $end) {  
  22.     $mid = (int)($start + ($end - $start) / 2); // 防止超出整数表示范围  
  23.        
  24.     if ($arr[$mid] == $needle) {  
  25.       return $mid;  
  26.     } else if ($arr[$mid] > $needle) {  
  27.       $end = $mid - 1;  
  28.     } else {  
  29.       $start = $mid + 1;  
  30.     }  
  31.   }  
  32.      
  33.   return - 1;  
  34. }  
  35.    
  36. $arr = array(  
  37.     1,  
  38.     2,  
  39.     3,  
  40.     4,  
  41.     5,  
  42.     6,  
  43.     7,  
  44.     8,  
  45.     9,  
  46.     10  
  47. );  
  48.    
  49. $needle = 5;  
  50.    
  51. echo seqSearch($arr$needle);  
  52. echo "<br>";  
  53.    
  54. echo midSearch($arr, 0, count($arr) - 1, $needle);  

3.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

  1. /**  
  2.  * Description:获取中枢点的位置  
  3.  *  
  4.  * @param array $array        
  5.  * @param int $left        
  6.  * @param int $right        
  7.  * @param string $field        
  8.  * @return int  
  9.  */ 
  10. function fetchArrayPivot (&$array$left$right$field)  
  11. {  
  12.   // 基准定义  
  13.   $stand = $array[$left];  
  14.      
  15.   // 遍历数组  
  16.   while ($left < $right) {  
  17.     while ($left < $right && $array[$right][$field] >= $stand[$field]) {  
  18.       $right --;  
  19.     }  
  20.     if ($left < $right) {  
  21.       $array[$left ++] = $array[$right];  
  22.     }  
  23.        
  24.     while ($left < $right && $array[$left][$field] <= $stand[$field]) {  
  25.       $left ++;  
  26.     }  
  27.     if ($left < $right) {  
  28.       $array[$right --] = $array[$left];  
  29.     }  
  30.   }  
  31.      
  32.   // 获取中枢点位置  
  33.   $array[$left] = $stand;  
  34.      
  35.   return $left;  
  36. }  
  37.    
  38. /**  
  39.  * Description:快速排序主程序  
  40.  *  
  41.  * @param array $array        
  42.  * @param int $begin        
  43.  * @param int $end        
  44.  * @param string $field        
  45.  */ 
  46. function quickSort (&$array$begin$end$field)  
  47. {  
  48.   // 变量定义  
  49.   $pivot = null;  
  50.      
  51.   if ($begin < $end) {  
  52.     $pivot = fetchArrayPivot($array$begin$end$field);  
  53.     quickSort($array$begin$pivot - 1, $field);  
  54.     quickSort($array$pivot + 1, $end$field);  
  55.   }  
  56. }  

利用快排的思想,增加一个field参数。

Tags: PHP文件操作 PHP算法面试题

分享到: