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"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 10,828评论 0 5
  • 原来一直觉得大学有一场轰轰烈烈的恋爱才算完整,也一直在留意与被留意,可是心里哪怕想恋爱到疯掉也从没放低过我对爱的要...
    大口喝水阅读 217评论 0 0
  • 6 夏天的时候,我一般都是在空调房里躺尸一天,大白就说我了。 “你这么宅不爱动,迟早要长胖。” 我看了一眼他脸上的...
    檬二阅读 543评论 16 14
  • 今日阅读《自控力》26-36页。关注两个问题:1.五分钟大脑冥想。2.两种不同的威胁。 1.五分钟大脑冥想 五分钟...
    sky10阅读 243评论 0 0