PHP中是否有一个内置函数可以智能地连接路径字符串?给定abc/de/
和/fg/x.php
作为参数的函数应该返回abc/de/fg/x.php
;使用abc/de
和fg/x.php
作为该函数的参数也应该返回相同的结果。
如果没有,是否有可用的类?它对于拆分路径或删除部分路径也很有价值。如果你写了一些东西,你可以在这里分享你的代码吗?
总是使用/
是可以的,我只是在为Linux编码。
在Python中有os.path.join
,这很棒。
发布于 2013-03-23 00:26:55
function join_paths() {
$paths = array();
foreach (func_get_args() as $arg) {
if ($arg !== '') { $paths[] = $arg; }
}
return preg_replace('#/+#','/',join('/', $paths));
}
我的解决方案更简单,更类似于Python os.path.join的工作方式
考虑以下测试用例
array my version @deceze @david_miller @mark
['',''] '' '' '/' '/'
['','/'] '/' '' '/' '/'
['/','a'] '/a' 'a' '//a' '/a'
['/','/a'] '/a' 'a' '//a' '//a'
['abc','def'] 'abc/def' 'abc/def' 'abc/def' 'abc/def'
['abc','/def'] 'abc/def' 'abc/def' 'abc/def' 'abc//def'
['/abc','def'] '/abc/def' 'abc/def' '/abc/def' '/abc/def'
['','foo.jpg'] 'foo.jpg' 'foo.jpg' '/foo.jpg' '/foo.jpg'
['dir','0','a.jpg'] 'dir/0/a.jpg' 'dir/a.jpg' 'dir/0/a.jpg' 'dir/0/a.txt'
发布于 2009-11-23 20:52:32
当尝试连接以Unix绝对路径开头的路径时,@deceze的函数不会保留前导/,例如joinPaths('/var/www', '/vhosts/site');
。
function unix_path() {
$args = func_get_args();
$paths = array();
foreach($args as $arg) {
$paths = array_merge($paths, (array)$arg);
}
foreach($paths as &$path) {
$path = trim($path, '/');
}
if (substr($args[0], 0, 1) == '/') {
$paths[0] = '/' . $paths[0];
}
return join('/', $paths);
}
发布于 2009-07-07 10:21:16
另一种方法是使用implode()
和explode()
。
$a = '/a/bc/def/';
$b = '/q/rs/tuv/path.xml';
$path = implode('/',array_filter(explode('/', $a . $b)));
echo $path; // -> a/bc/def/q/rs/tuv/path.xml
https://stackoverflow.com/questions/1091107
复制相似问题