在网上看到一个面试题,求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"