如何在PHP中加入文件系统路径字符串?

2022-08-30 07:57:09

PHP中是否有内置函数来智能地连接路径字符串?该函数,给定和作为参数,应返回 ;应使用 和 作为该函数的参数给出相同的结果。abc/de//fg/x.phpabc/de/fg/x.phpabc/defg/x.php

如果没有,是否有可用的类?它对于拆分路径或删除部分路径也很有价值。如果你写了一些东西,你可以在这里分享你的代码吗?

总是使用是可以的,我只为Linux编码。/

在Python中有,这很棒。os.path.join


答案 1
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'

答案 2

由于这似乎是一个流行的问题,并且评论中充满了“功能建议”或“错误报告”......此代码片段所做的就是将两个字符串与斜杠连接起来,而不会在它们之间复制斜杠。就这样。不多也不少。它不计算硬盘上的实际路径,也不实际保留起始斜杠(如果需要,请将其添加回去,至少您可以确保此代码始终返回字符串而不启动斜杠)。

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)


推荐