计算两个文件的相对路径

来源:互联网 发布:python编译器是什么 编辑:程序博客网 时间:2024/04/30 10:22

今天遇到的一个问题。如果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

0 0
原创粉丝点击