最近看到一个php的面试题,是在知道两个文件的绝对路径的情况下,求出文件1相对于文件2的相对路径。
这个问题,看似很简单,其实真简单,但却思考了很久才解决,变笨了!
下面我们我的方法,写出来,供大家参考,如果有不同意见或者问题,请留言给我:

/**
 * [myRelativePath 计算文件2相对于文件1的相对路径]
 * @param  [string] $file1 [文件1的绝对路径]
 * @param  [string] $file2 [文件2的绝对路径]
 * @return [string]        [文件2相对于文件1的相对路径]
 */
function getRelativePath($file1,$file2){
    //分别对两个文件路径进行分割
    $file1_arr = explode('/', $file1);
    $file2_arr = explode('/', $file2);

    //计算file1文件不同于file2的部分(计算差集)
    $arr1 = array_diff_assoc($file1_arr,$file2_arr);
    $arr2 = array_diff_assoc($file2_arr,$file1_arr);

    $arr1_cnt = count($arr1);
    $str_path = '';
    for($i=0;$i<$arr1_cnt-1;$i++){
        $str_path .='../';
    }
    $path2 = implode('/',$arr2);
    return $str_path . $path2;
}

思路还是很简单,就是先找出相同的部分,然后计算文件1到相同的路径的相对路径,
再然后,拼接文件2相同路径以后的路径。

此文已在本人博客发表地址:码客


今生V5
41 声望1 粉丝

一个好人