面试遇到的一个笔试题,自己写了一个这样的程序
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‘);