您的位置:首页 > 编程语言 > PHP开发

计算两个文件的相对路径

2014-11-03 10:19 309 查看
今天遇到的一个问题。如果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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息