**题目要求:**
有两个文件
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的深度=相差的深度
~~~