php求两个绝对路径的相对路径

在网上看到一个面试题,求B路径相对于A路径的相对路径,比如:
$a = '/a/e.php',
$b = '/a/b/c/d/1/2/c.php'
计算出的$b相对于$a的相对路径应该是:../b/c/d/1/2/c.php

$a = '/a/e.php';
$b = '/a/b/c/d/1/2/c.php';

// 求newPath相对于basePath的相对路径
function getRelativePath($basePath, $newPath){
    $relative = '';
    $base_pathArr = explode("/", $basePath);
    $new_pathArr = explode("/", $newPath);
    $cnt_base = count($base_pathArr);
    for($i = 0; $i < $cnt_base;$i++){
        if($base_pathArr[$i] != $new_pathArr[$i]){
            break;
        }
    }
    if($i == $cnt_base){ //全匹配的话,单独做处理,其实当前文件夹下也可以不用
        $relative = './';
    }else{
        $n = $cnt_base - $i;
        for($j=0;$j<$n;$j++){
            $relative = $relative."../";
        }
    }

    $extraPath = implode("/", array_slice($new_pathArr, $i));
    $relative_path = $relative.$extraPath;
    return $relative_path;
}

$res = getRelativePath($a, $b);
var_dump($res);

输出结果为:

string(18) "../b/c/d/1/2/c.php"

你可能感兴趣的:(php求两个绝对路径的相对路径)