两文件的相对路径计算

PHP code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$a  '/a/b/c/d/e.php' ;
$b  '/a/b/12/34/c.php' ;
 
function  getRelativePath( $a $b ) {
     $returnPath  array (dirname( $b ));
     print_r( $returnPath ); //Array ( [0] => /a/b/12/34 )
     $arrA  explode ( '/' $a );
     print_r( $arrA ); //Array ( [0] => [1] => a [2] => b [3] => c [4] => d [5] => e.php )
     $arrB  explode ( '/' $returnPath [0]);
     print_r( $arrB ); //Array ( [0] => [1] => a [2] => b [3] => 12 [4] => 34 )
 
     for  ( $n  = 1,  $len  count ( $arrB );  $n  $len $n ++) {
         if  ( $arrA [ $n ] !=  $arrB [ $n ]) {
             break ;
         }
     }
     echo  $n , $len ; //$n=3,$len=5
     if  ( $len  $n  > 0) { //
         $returnPath  array_merge ( $returnPath array_fill (1,  $len  $n '..' ));
     }
     print_r( $returnPath ); //Array ( [0] => /a/b/12/34 [1] => .. [2] => .. )
     $returnPath  array_merge ( $returnPath array_slice ( $arrA $n ));
     print_r( $returnPath ); //Array ( [0] => /a/b/12/34 [1] => .. [2] => .. [3] => c [4] => d [5] => e.php )
     return  implode( '/' $returnPath );
}
echo  getRelativePath( $a $b );
?>


第一步:找出 $a和$b同属的目录路径 "/a/b/ " , $b="/a/b/12/34/c.php" 和 "/a/b/" 路径深度相差为2,所以 $b="/a/b/12/34/c.php" 需要 "../../" (array_fill(1, $len - $n, '..'))才能返回到 "/a/b/"。
第二步:找出 $a=/a/b/c/d/e.php 去掉 "/a/b/"而剩余的部分 "c/d/e.php" (array_slice($arrA, $n))。
最后:"../../" 和 "c/d" 拼接得到 "../../c/d" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值