如何计算两个目录的相对路径?

PHP 算法面试题
0
0
分享
推荐答案
展示答案

<?php $path_1 = '/a/e/c/d/g'; $path_2 = '/a/e/f'; echo relative_path($path_1, $path_2);//输出 ../c/d/g function relative_path($path_1, $path_2) {     //将 $path_1 分片,取出所有的目录名     $path_segments_1 = explode('/', $path_1);     //将 $path_2 分片,取出所有的目录名     $path_segments_2 = explode('/', $path_2);     //暂存 $path_1 的长度     $path1_len = count($path_segments_1);     //暂存 $path_2 的长度     $path2_len = count($path_segments_2);     //保存相同的目录名的个数     $same = 0;     //如果 $path_1 或 $path_2 遍历完,即退出     while ($same < $path1_len && $same < $path2_len) {         //记录公共节点的次数         if ($path_segments_1[$same] == $path_segments_2[$same]) {             $same++;         } else {             break;         }     }     //计算 $path_2 距离公共节点需要向上寻找的次数     $diff = $path2_len - $same;     //diff不为0,表示不在同一目录,需要向上查找     if ($diff != 0) {         $str = str_repeat('../', abs($diff));     } else {         //diff为0时,表示在同一目录下时,不需要向上查找         $str = './';     }     //剩余的节点为 $path_1 从公共节点之后的所有节点     $remainders = array_slice($path_segments_1, $same);     if (!empty($remainders)) {         //如果不为空,则拼接起来         $str .= implode('/', $remainders);     }     return $str; }

答案已隐藏