php 获取相对路径实例代码

  1. function getRelativePath($a, $b) {
  2. $returnPath = array(dirname($b));
  3. $arrA = explode('/', $a);
  4. $arrB = explode('/', $returnPath[0]);
  5. for ($n = 1, $len = count($arrB); $n < $len; $n++) {
  6. if ($arrA[$n] != $arrB[$n]) {
  7. break;
  8. }
  9. }
  10. if ($len - $n > 0) {
  11. $returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..'));
  12. }
  13. $returnPath = array_merge($returnPath, array_slice($arrA, $n));
  14. return implode('/', $returnPath);
  15. }
  16. var_dump(getRelativePath($a, $b));
  17. //方法二
  18. $a = "/a/b/c/d/index.php";
  19. //echo basename($a,'.php');// 返回路径中文件名部分
  20. //echo dirname($a);
  21. $b = "/a/b/12/34/index2.php";
  22. function getRelativePath($path1,$path2){
  23. $p1 = dirname($path1);
  24. $p2 = dirname($path2);
  25. $arr1 = explode('/',$p1);
  26. $arr2 = explode('/',$p2);
  27. $diff_arr= array_diff($arr2,$arr1); //计算差集 注意这里 是谁相对谁的
  28. $inter_arr = array_intersect($arr1,$arr2);//计算交集
  29. $leng = count($inter_arr); //长度是以交集的为准 即求..部分
  30. for($i=1;$i<$leng;$i++){
  31. $inter_arr[$i] = '..';
  32. }
  33. $merge_arr = array_merge($inter_arr,$diff_arr);
  34. $fina_arr = implode('/',$merge_arr);
  35. return $fina_arr;//开源代码phpfensi.com
  36. }
  37. var_dump(getRelativePath($a,$b));
  38. //返回 string '/../../12/34' (length=12)
  39. //如果改成$diff_arr= array_diff($arr1,$arr2); 就返回string '/../../c/d (length=12)