计算两个路径的相对路径

$from = '/home/ftp123/aa.txt';
	$to = '/home/samba/bb.txt';
	function relativePath($from, $to, $ps = DIRECTORY_SEPARATOR)
	{
	  $arFrom = explode($ps, rtrim($from, $ps));//去除字符串最后的分隔符
	  $arTo = explode($ps, rtrim($to, $ps));//去除字符串最后的分隔符
	  while(count($arFrom) && count($arTo) && ($arFrom[0] == $arTo[0]))
	  {
	    array_shift($arFrom);
	    array_shift($arTo);
	  }
	 //这里是str_pad的妙用
	  return str_pad("", count($arFrom) * 3, '..'.$ps).implode($ps, $arTo);
	}

	echo relativePath($from,$to,'/');



上面是自己写的计算两个相对路径的函数,可能步骤有点多,但是这个也是一种思路,如果你有更好的,请贴上代码,还有就是说这个代码一次性调试成功,很高兴自己在提高

,而不是写好了立马就测试,先检查代码,而不是去靠报错来解决问题,你赞同吗?


今天在看Php手册的时候又发现了一种方法,这种方法非常简洁,多么奇妙写法



<?php
	$b = '/a/b/c/d/f/g/e.php';
	$a = '/a/b/12/34/c.php';

	//实现思路
	//1.将两个路径从顶端比对
	//2.退还到相同的父目录
	
	function get_relative_path($a,$b)
	{	
		$a = str_replace('\\', '/', $a);
		$b = str_replace('\\','/',$b);
		$arra = explode('/', $a);
		$arrb = explode('/', $b);

		//寻找相同目录
		for($i=0,$j=count($arra)-1;$i<$j;$i++)
		{	

			if($arra[$i] == $arrb[$i])
			{
				unset($arra[$i]);
				unset($arrb[$i]);
			}
			else
			{	
				$arra[$i] = '..';
			}
		}
		array_pop($arra);//将e.php这个弹出栈
		$stra = implode('/',$arra); //../../
		$strb = implode('/',$arrb);//12/34/c.php
		return $stra.'/'.$strb;
	}

	echo get_relative_path($a,$b);
?>


<?php$b = '/a/b/c/d/f/g/e.php';$a = '/a/b/12/34/c.php';//实现思路//1.将两个路径从顶端比对//2.退还到相同的父目录function get_relative_path($a,$b){$a = str_replace('\\', '/', $a);$b = str_replace('\\','/',$b);$arra = explode('/', $a);$arrb = explode('/', $b);//寻找相同目录for($i=0,$j=count($arra)-1;$i<$j;$i++){if($arra[$i] == $arrb[$i]){unset($arra[$i]);unset($arrb[$i]);}else{$arra[$i] = '..';}}array_pop($arra);//将e.php这个弹出栈$stra = implode('/',$arra); //../../$strb = implode('/',$arrb);//12/34/c.phpreturn $stra.'/'.$strb;}echo get_relative_path($a,$b);?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值