计算两个文件的相对路径

今天遇到的一个问题。如果e.php的路径是/a/b/c/d/e.php c.php的路径是/a/b/c/f/g/c.php 计算c.php相对于e.php的路径。

算法比较简单,不一定是最优解,思路是找到两个路径最后相同的路径部分,之后用../填充e.php之后的路径,用原路径填充c.php之后的路径,合并而成一个相对路径,算法封装过,类如下:

class Path {
public $url1 = "/a/b/c/d/e.php";
public $url2 = "/a/b/c/f/g/c.php";

public function __construct($u1="/a/b/c/d/e.php",$u2="/a/b/c/f/g/c.php"){
$this -> url1 = $u1;
$this -> url2 = $u2;
}

public function __toString(){
return "show path from ".$this->url1." to ".$this->url2;
}


public function path_way(){
$arr1 = explode("/",$this -> url1);
$arr2 = explode("/",$this -> url2);
$str = "";
$point = 0;
//找到两个路径最后的相同位置
for($i=1;$i<(min(count($arr1),count($arr2))-1);$i++){
if($arr1[$i]!=$arr2[$i]){
$point = $i-1;

break;

}


}
//分别循环,将路径1相同位置后的路径用"../"填充
foreach($arr1 as $key => $value ){
if($key > $point && $key != (count($arr1)-1)){
$str .= "../";
}
}

//路径2相同位置后的路径用原路径填充
foreach($arr2 as $key => $value){
if($key > $point){
$str .=  ($key != ($point+1)) ? "/".$value  : $value;
}
}
return $str;
}
}

结果如下:

$path1 = new Path();
echo $path1->path_way();

输出 ../f/g/c.php

$path2 = new Path("/a/b/e/f/e.php", "/a/b/c/d/c.php");
echo $path2->path_way();

输出 ../../c/d/c.php

$path3 = new Path("/a/b/34/dad/e.php","/y/d/e/f/g/h/c.php");
echo $path3->path_way() ;

输出:../../../../y/d/e/f/g/h/c.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值