PHP:从路径中获取最后一个目录名

18

我正在编写一个用于获取不同数据库查询的函数。现在一切都很顺利,但只需要从定义的路径中获取最后一个目录名。

$qa_path=site_root('/learnphp/docs/');

我想从上面的路径中仅获取docs。这里,site_root不过是$_SERVER['DOCUMENT_ROOT'],那么我该如何仅获取docs

谢谢


3
请参见:http://php.net/manual/zh/function.basename.php - ficuscr
谢谢,但文件可能在同一目录中,也可能不在。我的意思是只是询问,因为我没有那么多经验。 - Code Lover
8个回答

35

啊,这是我找到的最简单的解决方案。只有一个快速的问题,如果有3或4个子级方向,它仍然会获取最后一个目录名称吗? - Code Lover
是的。始终是路径中的最后一个部分。无论有多少级深度,它都会返回最深的目录或文件名(如果存在)。 - Till Helge
这很完美,你的回答值得被选择为最佳答案。非常感谢。 - Code Lover

32

如果您的字符串以文件结尾,例如:

提供的答案将无效。

basename('/home/mypath/test.zip');

提供

test.zip

所以如果您的字符串包含文件,则不要忘记先使用 dirname 对其进行处理。

basename(dirname('/home/mypath/test.zip'));

给予

mypath

6

这是最简单的方法:

<?php
  echo basename(getcwd());
?>

getcwd()函数可以获得当前工作目录的完整路径,而basename()函数则可以获得最后一个目录的名称。


2

这个解决方案是有效的,只是不是最好的,所以不应该被投下反对票。 - crush
这是一个有效的答案。不应该因为你认为可能有“更好”的方法而被投票否决。 - Mattt
谢谢。是的,basename似乎是一种“更好”的方法,但这个也应该可以工作 :) - C0D3
关于负投票的解释:这并不是一个完整的答案,它将返回一个数组对象,需要使用额外的逻辑进行处理,但是该逻辑并未提供。有类似的答案提供了这一部分逻辑。 - Oldskool
$result[$count($result)-1]; 如果您的数组名为 $result。 - C0D3

1
$qa_path=explode('/', '/learnphp/docs/');
echo $qa_path[2]; // output docs

但是,如果路径中有超过三个目录,这个数组将始终获取第二个目录。正确吗? - Code Lover
例如,如果其他人使用此函数,则必须手动进行修改。这并不理想。我希望有一些解决方案,可以自动获取最后一个目录。 - Code Lover
1
和@wezzy说的一样,你可以使用以下代码:$qa_path = $qa_path[count($qa_path) - 1]; - outman

1

您可以使用这个简单的代码片段:

$qa_path=site_root('/learnphp/docs/');
$qa_path = explode("/", $qa_path);
$qa_path = $qa_path[count($qa_path) - 1];

这没有输出任何结果。 - Code Lover
因为字符串末尾有"/",所以你是正确的,尝试使用Till Helge Helwig建议的basename()方法,这是一个更智能的解决方案。 - wezzy

1

这将有所帮助

$qa_path=site_root('/learnphp/docs/');
$q_path = explode ("/", $qa_path);
$lastV =  end($q_path);

1
这将为您提供当前目录名称: echo basename(dirname(__FILE__));

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