最近看到一個php的面試題,是在知道兩個檔案的絕對路徑的情況下,求出檔案1相對於檔案2的相對路徑。
這個問題,看似很簡單,其實真簡單,但卻思考了很久才解決,變笨了!
下面我們我的方法,寫出來,供大家參考,如果有不同意見或者問題,請留言給我:
/**
* [myRelativePath 計算檔案2相對於檔案1的相對路徑]
* @param [string] $file1 [檔案1的絕對路徑]
* @param [string] $file2 [檔案2的絕對路徑]
* @return [string] [檔案2相對於檔案1的相對路徑]
*/
function getRelativePath($file1,$file2){
//分別對兩個檔案路徑進行分割
$file1_arr = explode(`/`, $file1);
$file2_arr = explode(`/`, $file2);
//計算file1檔案不同於file2的部分(計算差集)
$arr1 = array_diff_assoc($file1_arr,$file2_arr);
$arr2 = array_diff_assoc($file2_arr,$file1_arr);
$arr1_cnt = count($arr1);
$str_path = ``;
for($i=0;$i<$arr1_cnt-1;$i++){
$str_path .=`../`;
}
$path2 = implode(`/`,$arr2);
return $str_path . $path2;
}
思路還是很簡單,就是先找出相同的部分,然後計算檔案1到相同的路徑的相對路徑,
再然後,拼接檔案2相同路徑以後的路徑。
此文已在本人部落格發表地址:碼客