新浪有個面試題目:寫一個php函數算出兩個文件的相對路徑
//計算出 c.php相對於e.php的相對路徑應該是../../12/34
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
getpathinfo($a, $b);
function getpathinfo( $a, $b ) {
$a2array = explode('/', $a);
$b2array = explode('/', $b);
$pathinfo = '';
for( $i = 1; $i <= count($b2array)-2; $i++ ) {
$pathinfo.=$a2array[$i] == $b2array[$i] ? '../' : $b2array[$i].'/';
}
print_R($pathinfo);
}
?>
還有個比較復雜的方法不太完善思路是正確的可以研究
$a = 'aa/bb/cc/dd/a.php';
$b ='aa/bb/11/22/33/b.php';
//寫一個函數,數出二個文件的相對路徑。
function GetNum($variant,$variant2){
$pth1 = null;
$pth2 = null;
$tmp = array();
//分別判斷路徑下面的文件是不是存在.
if(is_file($variant) && is_file($variant2)){
$len1 = count($pth1 = explode('/',dirname($variant)));
$len2 = count($pth2 = explode('/',dirname($variant2)));
$maxlen = max($len1,$len2);
for($i=1;$i<$maxlen;$i++){
if($pth1[$i] != $pth2[$i] && isset($pth1[$i])){
if(isset($pth2[$i])) $tmp[] = $pth2[$i];
}else{
$tmp[] = $pth2[$i];
$pathe .= '../';
}
}
return $pathe.implode('/',$tmp).'/'.basename($variant2);
}else{
return '路徑不合法!';
}
}
print_r(GetNum($a,$b));