读书人

写一个函数算出两个资料的相对路径

发布时间: 2012-10-27 10:42:26 作者: rapoo

写一个函数,算出两个文件的相对路径 (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; elsereturn $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

读书人网 >软件架构设计

热点推荐