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‘);

 

 

PHP计算两个路径的相对路径,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。