Sina はインタビューで次のような質問をしました: 2 つのファイルの相対パスを計算する php 関数を作成しますか? php //e.php に対する c.php の相対パスを計算します。../../12/34 $a = / /b/c/d/e.php; $b = /a/b/12/34/c.php; getpathinfo($a, $b); 🎜 >
Sina からのインタビューの質問: 2 つのファイルの相対パスを計算する php 関数を記述してください
// e.php に対する c.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 $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';
// 2 つのファイルの相対パスをカウントする関数を作成します。
関数 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 if($pth1[$i] != $pth2[$i] && isset($pth1[$i])){
if(isset($pth2[$i])) $tmp[] = $pth2[$i];
}その他{
$tmp[] = $pth2[$i];
$path .= '../';
}
}
return $path.implode('/',$tmp).'/'.basename($variant2);
}その他{
return 'パスが不正です!';
}
}
print_r(GetNum($a,$b));
?>