首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中连接文件系统路径字符串?

如何在PHP中连接文件系统路径字符串?
EN

Stack Overflow用户
提问于 2009-07-07 08:52:09
回答 17查看 65.3K关注 0票数 83

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

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

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

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

EN

回答 17

Stack Overflow用户

发布于 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'
票数 136
EN

Stack Overflow用户

发布于 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);
}
票数 17
EN

Stack Overflow用户

发布于 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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1091107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档