首页 > 开发 > PHP > 正文

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

2024-05-04 23:38:42
字体:
来源:转载
供稿:网友

这篇文章主要介绍了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参数

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表