两文件的相对路径计算

来源:互联网 发布:东安格利亚大学 知乎 编辑:程序博客网 时间:2024/05/20 05:04
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($returnPatharray_fill(1, $len $n'..'));
    }
    print_r($returnPath);//Array ( [0] => /a/b/12/34 [1] => .. [2] => .. )
    $returnPath array_merge($returnPatharray_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" 
0 0
原创粉丝点击