PHP 写一个函数,算出两个文件的相对路径?

 

//写一个函数,算出两个文件的相对路径,如 $a='/a/b/c/d/e.php';$b='/a/b/12/34/c.php';
//计算出$b相对于$a的相对路径应是 ../../c/d ;

 

方法一、 

 1  //计算出 c.php相对于e.php的相对路径应该是../../c/d/e/f/g/h/
 2 $a = '/a/b/c/d/e/f/g/h/e.php';
 3 $b = '/a/b/1/2/c.php';
 4 //c.php相对于e.php
 5 echo getpathinfo($a, $b);
 6 //e.php相对于c.php
 7 //echo getpathinfo($b, $b);
 8 /**
 9  * 方法一
10  * @param $path1
11  * @param $path2
12  * @return string
13  */
14 function getpathinfo($path1, $path2) {
15     $a2array    = explode('/', dirname($path1));
16     $b2array    = explode('/', dirname($path2));  
17     $pathinfo   = '';  
18     for( $i = 1; $i <= count($b2array)-1; $i++ ) {
19         //如果两个路径长度不同下标
20         if(!isset($a2array[$i])){
21             $a2array[$i]='';
22         }elseif(!isset($a2array[$i])){
23             $b2array[$i]='';
24         }
25         $pathinfo.=$a2array[$i] == $b2array[$i] ? '../' : $b2array[$i].'/';
26         
27     }
28     return $pathinfo;
29 }
30  

 

方法二、

 1 //方法二、
 2 echo "<br/>";
 3 echo getRelativePath($a, $b);  
 4 echo "<br/>";
 5 
 6 /**
 7  * 方法二
 8  * @param $path1
 9  * @param $path2
10  */
11 function getRelativePath($path1, $path2){  
12      $arr1=explode('/',dirname($path1)); 
13      $arr2=explode('/',dirname($path2)); 
14      for($i=0, $len=count($arr2); $i<$len; $i++ ){
15             if($arr1[$i]!=$arr2[$i]){
16                 break ; 
17             } 
18      } 
19       
20      if($i<$len){
21          $return_path=array_fill(0,$len-$i,'..');
22      }
23      //$b相对于$a
24      $return_path=array_merge($return_path,array_slice($arr1,$i));
25      /*//$a相对于$b
26      $return_path=array_merge($return_path,array_slice($arr2,$i));*/
27      echo implode('/',$return_path);
28     
29 }  

 

posted @ 2016-06-03 13:08  飞越全球  阅读(5040)  评论(0编辑  收藏  举报