如何在PHP中加入文件系统路径字符串?
PHP中是否有内置函数来智能地连接路径字符串?该函数,给定和作为参数,应返回 ;应使用 和 作为该函数的参数给出相同的结果。abc/de/
/fg/x.php
abc/de/fg/x.php
abc/de
fg/x.php
如果没有,是否有可用的类?它对于拆分路径或删除部分路径也很有价值。如果你写了一些东西,你可以在这里分享你的代码吗?
总是使用是可以的,我只为Linux编码。/
在Python中有,这很棒。os.path.join
PHP中是否有内置函数来智能地连接路径字符串?该函数,给定和作为参数,应返回 ;应使用 和 作为该函数的参数给出相同的结果。abc/de/
/fg/x.php
abc/de/fg/x.php
abc/de
fg/x.php
如果没有,是否有可用的类?它对于拆分路径或删除部分路径也很有价值。如果你写了一些东西,你可以在这里分享你的代码吗?
总是使用是可以的,我只为Linux编码。/
在Python中有,这很棒。os.path.join
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'
由于这似乎是一个流行的问题,并且评论中充满了“功能建议”或“错误报告”......此代码片段所做的就是将两个字符串与斜杠连接起来,而不会在它们之间复制斜杠。就这样。不多也不少。它不计算硬盘上的实际路径,也不实际保留起始斜杠(如果需要,请将其添加回去,至少您可以确保此代码始终返回字符串而不启动斜杠)。
join('/', array(trim("abc/de/", '/'), trim("/fg/x.php", '/')));
最终结果将始终是一条在开头或结尾没有斜杠,内部没有双斜杠的路径。随意从中制作一个功能。
编辑:这是上面片段的一个很好的灵活函数包装器。您可以根据需要传递任意数量的路径片段,可以是数组,也可以是单独的参数:
function joinPaths() {
$args = func_get_args();
$paths = array();
foreach ($args as $arg) {
$paths = array_merge($paths, (array)$arg);
}
$paths = array_map(create_function('$p', 'return trim($p, "/");'), $paths);
$paths = array_filter($paths);
return join('/', $paths);
}
echo joinPaths(array('my/path', 'is', '/an/array'));
//or
echo joinPaths('my/paths/', '/are/', 'a/r/g/u/m/e/n/t/s/');
:o)