大概的在网上找了一下,觉得大家的实现的都不够简洁,于是自己写了一个,写完了,我在想,就是这样么,这样有什么问题么,这是最好的么。
比如如果路径中出现 “///”, “\/” 的分隔符改如何处理?
<?php
function getRelativePath($path1, $path2){
// 参数判断
if(!isset($path1) || !isset($path2)){
return '请检查参数';
}
$path1_arr = explode('/', $path1);
$path2_arr = explode('/', $path2);
$count = count($path1_arr);
$res_path = '';
$pos = 0; // 异同部分开始的位置
foreach ($path1_arr as $key => $value) {
if($value != $path2_arr[$key]){
$pos = $key;
break;
}
}
// 需要返回的层级数
$len = $count - $pos -1;
// 拼接相对前缀
for($i = $len; $len > 0; $len--){
$res_path .= '../';
}
// 求剩余路径
$tail = implode('/', array_slice($path2_arr, $pos));
return $res_path . $tail;
}
echo getRelativePath('./a/b/d/e/f/2.jpg', './a/b/c/1.png');
?>