国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 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參數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 措美县| 华坪县| 苍山县| 大关县| 常德市| 临沂市| 丹寨县| 东明县| 万州区| 鄂温| 乐清市| 乌苏市| 上高县| 旬阳县| 灌阳县| 涪陵区| 全椒县| 南开区| 塘沽区| 那曲县| 九江县| 花莲县| 沅江市| 宜宾县| 大港区| 邮箱| 东平县| 离岛区| 宝山区| 城口县| 南昌市| 北票市| 漾濞| 内乡县| 庆安县| 察哈| 囊谦县| 北川| 贺兰县| 突泉县| 濮阳市|