写一个函数,算出两个文件的相对路径 (b相对于a)

http://hi.baidu.com/ken00821/blog/item/6a4cf8d48dc7a4ce50da4b09.html

function getRelativePath($a,$b){
$a_url = array(dirname($a));
$b_url = array(dirname($b));
$a_arr = explode('/',$a_url[0]);
$b_arr = explode('/',$b_url[0]);
$len    = count($a_arr);
$art1 = '';
$art2 = '';
    for($i=1;$i<$len;$i++){
        if($a_arr[$i]<>$b_arr[$i]){
            $art1.= '../';
            $art2.= $a_arr[$i].'/';
        }
    }
    return $art1.$art2; 
}
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';

echo getRelativePath($a, $b); //../../c/d/ 



解决的问题:当你在一个文件可能会被很多个文件包含,并且路径不过顶的时候,可能会使用到这个方法:这个方法是对上面方法的修改:
function getRelativePath($a,$b){
		// =/MyWebSite/dev/gov1Dev/config/dbConfig.php
		// =/MyWebSite/dev/gov1Dev/index.php
		
		//a=/MyWebSite/dev/gov1Dev/config/dbConfig.php
		//b=/MyWebSite/dev/gov1Dev/pages/level1.php
		
		//echo "a=".$a."<br>";
		//echo "b=".$b."<br>";
		$fileName = substr($a,strripos($a,"/")+1);
		$a_url = array(dirname($a));
		$b_url = array(dirname($b));
		$a_arr = explode('/',$a_url[0]);
		$b_arr = explode('/',$b_url[0]);
		$len    = count($a_arr);
		$len1    = count($b_arr);
		$art1 = '';
		$art2 = '';
		for($i=1;$i<$len;$i++){
		    if($a_arr[$i]<>$b_arr[$i]){
		        $art1.= '../';
		        $art2.= $a_arr[$i].'/';
		    }
		}
		if((count($a_arr)-count($b_arr))>0)
			return $art2.$fileName; 
		else
			return $art1.$art2.$fileName; 
		//return $art2.$fileName; 
	}



第一个参数: 被包含文件:/dev/gov1Dev/config/dbConfig.php
第二个参数: 包含文件:/dev/gov1Dev/pages/level2.php
得到结果:../config/dbConfig.php

那么,在level.php包含dbConfig的应该写成:../config/dbConfig.php

猜你喜欢

转载自panyongzheng.iteye.com/blog/1166933
今日推荐