【分享】求相对路径方法小研究

来源:互联网 发布:恶搞视频配音软件 编辑:程序博客网 时间:2024/05/20 21:19
最近面试题扎堆,不少问题挺难的,今天研究了一下这个小问题,跟大家分享一下下:
题目如下:
写一个函数,算出两个文件的相对路径
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
  计算出 $b 相对于 $a 的相对路径应该是 ../../c/d

看了很多答案,发现都有小问题,比如$a='/a/b/c/d/e/f/n.php';,$b='/a/b/c/34/gg/a/b/c/g.php';有不少答案都是采用循环数组找不同元素时用../来拼接解决,这样的后面有相同目录就会出错了。好了废话就不说了,奉上我写的方法,难免有不足哈,望大家指点!
  1. /**
  2. * 求两路径的相对路径
  3. * @param string $patha 路径a
  4. * @param string $pathb 路径b
  5. * @return string 相对路径
  6. */
  7. function getRelativePath($patha,$pathb){
  8. $arr_a=explode('/',trim(dirname($patha),'/'));
  9. $arr_b=explode('/',trim(dirname($pathb),'/'));
  10. $n=min(count($arr_a),count($arr_b));//用最短路径来循环
  11. $flag=true;//标记位[标记是否完全没有交集]
  12. for($i=0;$i<$n;$i++){
  13. if($arr_a[$i]==$arr_b[$i]){
  14. unset($arr_a[$i],$arr_b[$i]);//去除前面相同的部分
  15. }else{
  16. if($i==0)
  17. $flag=false;//两路径没有交集
  18. break;//停止循环
  19. }
  20. }
  21. $str=$flag?str_repeat('../',count($arr_b)+1):'/';//没有交集则为根目录[Linux情况,windows自己改]
  22. return $str.join('/',$arr_a);//拼接并返回
  23. }
  24. //TEST
  25. $a ='/a/b/c/d/e.php';
  26. $b ='/a/b/12/34/c.php';
  27. echo '路径a:'.$a;
  28. echo '<br />路径b:'.$b;
  29. echo '<br />路径a和路径b的相对路径为:';
  30. echo getRelativePath($a,$b);

原文地址:http://bbs.lampbrother.net/read-htm-tid-117695.html

阅读(76) | 评论(0) | 转发(0) |
0

上一篇:睡觉时间+1=睡着时间

下一篇:MySQL数据库MyISAM和InnoDB存储引擎的比较

相关热门文章
  • 自定义u-boot启动logo的方法...
  • C++ 将unsigned char数组 ...
  • 蚊香不管用 合肥“捕蚊哥”土...
  • 教你三招清洁家里的木地板...
  • 《数字技术与应用》征稿**投稿...
  • IP Sec VPN与NAT破镜重圆
  • 网站导航
  • GoAgent图文设置教程
  • UT2.0正式版下载
  • tomcat6.0配置(含配置视频下载...
  • 大家都是用什么来管理hadoop集...
  • 网站被人挂了吗,添加了些程序...
  • Nginx如何保证不走宕机的那个...
  • 大家谈谈MYSQL客户端和服务器...
  • 以下代码运行后为何会输出5?...
给主人留下些什么吧!~~
原创粉丝点击