PHP面試題,計算兩個檔案之間的相對路徑方法

2021-10-22 14:37:18 字數 1914 閱讀 9707

看了網友  的**,很精簡,而且測試結果也很滿意

例如:檔案a 的路徑是 /home/web/lib/img/cache.php

檔案b的路徑是 /home/web/api/img/show.php

那麼,檔案a相對於檔案b的路徑是 ../../lib/img/cache.php,即檔案b 訪問 檔案a的相對路徑。

上**

function getrelativepath($patha, $pathb)

}$blen = count($arrb) - $depth - 1;

if ($blen > 0) else

$tmp = array_merge($prefix, array_slice($arra, $depth));

$relativepath = implode('/', $tmp);

return $relativepath;

}

看**量覺得很簡單,但是面試的時候這道題還有友情提示,說歷史正確率只有25%。。。。。所以讀完**給各位出乙個保姆級注釋,不理解光背**的話,以後再遇到還是感覺很模糊。上**

function getrelativepath($patha, $pathb)

if (!isset($inter[$i]))

}//這個是計算出字串左邊應該給幾個'..'。

//幾個'..'取決於b的減掉切割深度以後,再減去b的檔案所在的目錄後剩餘的目錄個數

//如下

// /home/web/lib/img/cache.php

// /home/web/api/show.php

//去掉/home/web/和show.php的目錄後 就剩乙個api目錄了。這乙個api就替換為乙個'..'

$blen = count($arrb) - $depth - 1;

//這裡判斷一下如果》0 說明如上面描述的還有目錄,直接替換為'..',剩餘幾個就給perfix補充幾個'..'

if ($blen > 0) else

//當你看了上面的注釋,這裡就不用多啥了吧。

$tmp = array_merge($prefix, array_slice($arra, $depth));

$relativepath = implode('/', $tmp);

return $relativepath;

}

測試資料

$path1 = '/home/web/lib/img/cache.php';

$path2 = '/home/show.php';

echo getrelativepath($path1, $path2) . '\r'; // ./web/lib/img/cache.php

$path1 = '/home/web/lib/img/cache.php';

$path2 = '/home/web/api/show.php';

echo getrelativepath($path1, $path2) . '\r'; // ../lib/img/cache.php

//$path1 = '/home/web/lib/img/cache.php';

$path2 = '/home/web/api/img/show.php';

echo getrelativepath($path1, $path2) . '\r'; // ../../lib/img/cache.php

//$path1 = '/home/web/lib/img/cache.php';

$path2 = '/xhome/web/show.php';

echo getrelativepath($path1, $path2) . '\r'; // ../../home/web/lib/img/cache.php

兩個面試題

1.實現乙個lite版的字串替換函式 c c char strreplace char str,const char sub,const char rep 限制條件和要求如下 1.其中str為原字串,sub為待被替換的子串。為簡單起見,假定字串sub和rep長度一樣 2.直接對原字串str進行修改並...

兩個簡單的面試題

分享兩個簡單的面試題,好吧,求質數的那個面試題居然沒做出來。要好好打基礎 public class study0812 獲取arr陣列中最大的數的索引,該索引加97就是字元中重複最多的字元 int maxindex 0 for int i 0 i arr.length 1 i return char...

面試題 兩個佇列實現棧

兩個佇列實現棧 前提已知 typedef struct queue queue void initqueue queue q void enqueue queue q,int key int dequeue queue q int sizeofqueue queue q int isqueueemp...