**題目要求:**
有兩個文件
f1=/a/b/c/m.txt
f2=/a/b/c/d/e/n.txt
結果應該為 ../../../m.txt
**思路**
1.將兩個轉化為數組。
2.求出相同部分。
3.相同部分的長度為數組中相對路徑的./個數
4.相對路徑也就是所有的./+要求文件的其他路徑
5.移除要求文件相同路徑部分,并且用上面所求的相對路徑符號替代。
6.所求數組再次轉化為字符串。
**php代碼實現**
~~~
<?php
function get_relative_path($s1,$s2)
{
//將兩個字符轉化為數組
$arr1=explode("/",$s1);
$arr2=explode("/",$s2);
// 公共部分數組 注意 可能出問題
$arr3=array();
for ($i=0; $i < count($arr1); $i++) {
if ($arr1[$i]==$arr2[$i]) {
array_push($arr3,$arr1[$i]);
continue;
}
else{
break;
}
}
//深度
$sd=count($arr3);
// 如果兩個沒有相同部分,直接 ..$s1 路徑
if ($sd<=0) {
return "..".$s1;
}
// 否則循環公共長度,按長度 設置../的長度
elseif ($sd>0) {
$pqz="";
for ($j=0;$j<$sd;$j++) {
$pqz=$pqz."../";
}
// 移除前面相同部分
$narr1=array_splice($arr1,$sd);
// 再次將移除了相同部分的數組轉化為字符
$ns1=implode("/", $narr1);
return $pqz.$ns1;
}
}
$s2="/a1/b/c/m.txt";
$s1="/a/b/n.txt";
// ./n.txt
// 求相對路徑 在s1中返回s2的相對路徑
echo get_relative_path($s2,$s1);
// 文件2的深度-文件1的深度=相差的深度
~~~