如何从字符串路径中获取最后一个目录

64

我想从一个保存在字符串中的路径中获取最后一个文件夹名。

例如: Home/new_folder/test

result = test

谢谢大家 ;) 大家都是正确的。 - Rickstar
2
你应该接受一个答案。可以是第一个解决你问题的答案,也可以是在提供正确答案的同时添加了重要/有用信息的答案。 - acm
完成了,顺便说一下,是你,再次感谢。 - Rickstar
正则表达式看起来像 \/[^\/]+$ - Muhammad Omer Aslam
11个回答

137

使用basename函数。

basename('Home/new_folder/test');
// output: test
作为对那些回答使用 explode 的补充说明:
要获取路径的尾部名称组件,你应该使用 basename! 如果你的路径类似于 $str = "this/is/something/",那么使用 end(explode($str)) 将会失败。

这个答案的问题在于使用干净的URL(没有脚本扩展名)- 最后一项是一个脚本,而不是最后一个文件夹。请检查我的建议解决方案... - Ash501
这个答案的问题在于它需要一个费力具体路径作为参数。(我很懒,这对我来说行不通。)Ash解决了一个问题。(但它很混乱。而basename而不是explode是正确的工具。所以近了,Ash501。)一行代码,动态、便携、通常正确,已经为您打包成一个函数。不客气。 - BradChesney79
1
如果你有一个完整的文件路径,例如/home/test/some_file.php,并且你需要该文件所在目录test,可以使用basename(dirname('/home/test/some_file.php'));。感谢您的建议。 - Mikhail.root

21
您可以使用basename()函数:
$last = basename("Home/new_folder/test");

1
+1 分,如果不使用字符串操作,并且使用正确的工具完成任务。 - Alan Whitelaw

9
您可以使用pathinfo - pathinfo
$pathinfo = pathinfo('dir/path', PATHINFO_DIRNAME);
$pathinfo = array_filter( explode('/', $pathinfo) );

$result = array_pop($pathinfo);

这也可以确保尾随斜杠不会导致返回空字符串。

5

Explode将字符串转换为数组,然后您可以选择该数组中的最后一个值作为结果。

$result = end((explode('/', $path)));

5

试试这个

echo basename(dirname(__FILE__));

或者这个

echo basename(dirname(__DIR__));

4

我知道这是一个老问题,但是这个方法可以自动获取最后一个文件夹,而不会把列表中的最后一个项弄混 - 这可能是脚本,而不是实际的最后一个文件夹。

$url = pathinfo($_SERVER['SCRIPT_NAME'], PATHINFO_DIRNAME);
$url_var = explode('/' , $url);
$last_folder = end($url_var);

被接受的答案提供了更好的方法。但是如果你必须使用explode,你可以使用explode(DIRECTORY_SEPARATOR, $url);来使它在Windows/Linux上兼容。 - Kalimah

3

您可以执行

$baseUrl=basename('/path/to/site');
echo $baseUrl;

如果您的URL末尾有'/',则可以执行以下操作:
$url_to_array = parse_url('/path/to/site/');
$baseUrl = basename($url_to_array['path']);
echo $baseUrl;`

2
$directory = 'Home/new_folder/test';
$path = explode('/',$directory);
$lastDir = array_pop($path);

2
<?php
$path = explode('/', $yourPathVar);
// array_pop gives you the last element of an array()
$last = array_pop($path);
?>

1

因此,您希望有一个动态的东西,大部分时间可以直接使用--也许是可重用的函数或其他内容。

通过$_SERVER数据从Web服务器提供的数据中获取URI:$_SERVER('REQUEST_URI')

从该URI中获取路径:parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))

一旦从完整URI中提取了路径,basename()是获取最后一个目录的正确工具:basename(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))

function lastPathDir() {
    // get a URI, parse the path from it, get the last directory, & spit it out 
    return basename(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
}

在编写时,我已经看到可能会出现的一个问题。前端的一些操作可能会变得有点疯狂,并且可能会提供一个你没有预期的URL。 - BradChesney79
此外,OP想要处理路径而不是URL。 - Bob Ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接