首页 > 代码库 > PHP计算两个路径的相对路径

PHP计算两个路径的相对路径

面试遇到的一个笔试题,自己写了一个这样的程序

 1 $a = "a/b/c/d/e/f/1.txt"; 2 $b = "a/b/c/d/f/e/2.txt"; 3  4 $a_arr = explode(‘/‘,$a); 5 $b_arr = explode(‘/‘,$b); 6 foreach($a_arr as $k=>$v){ 7         if($a_arr[$k] == $b_arr[$k]){ 8             unset($a_arr[$k]); 9             unset($b_arr[$k]);10         }else{11             break;12         }13 }14 15 $num = count($b_arr);16 $url = ‘‘;17 $a_url = implode(‘/‘,$a_arr);18 for($i=0;$i<($num-1);$i++){19     $url .= ‘../‘;20 }21 $url .=$a_url;22 echo $url;

感觉不对,看到别的人做的,顿悟

 1 function relativePath($aPath, $bPath) { 2                 $aArr = explode(‘/‘, $aPath);    //explode函数用于切分字符串,返回切分后的数组,此处用‘/‘切分字符串 3                 $bArr = explode(‘/‘, $bPath); 4                 $aDiffToB = array_diff_assoc($aArr, $bArr);    //array_diff_assoc()用于获取A数组与B数组之间元素的差集,Key和Value都不相同视为不同元素,此处返回在A数组中且与B数组不相同的元素 5                 
           $aDiffToA = array_diff_assoc($bArr, $aArr);


           $count = count($aDiffToA); 6 7 $path = ‘‘; 8 for($i = 0; $i < $count - 1; $i++){ 9 $path .= ‘../‘; 10 }11 12 $path .= implode(‘/‘, $aDiffToA); //implode()用于使用指定字符串连接数组元素,此处返回用‘/‘连接数组元素后的字符串13 14 return $path;15 }16 17 echo relativePath(‘/a/b/c/d/a.php‘, ‘/a/b/1/2/b.php‘);