PHP如何删除路径的最后一部分

31
我有一个像这样的路径:

parent/child/reply

我如何使用PHP删除路径的最后一部分,使其看起来像这样:

parent/child

6个回答

74

28

dirname() 函数可以被多次使用

  • 用于获取父目录/子目录 - dirname('parent/child/reply')
  • 用于获取父目录的父目录 - dirname(dirname('parent/child/reply'))

7

3
    preg_replace("/\/\w+$/i","",__DIR__);
     # Note you may also need to add .DIRECTORY_SEPARATOR at the end.

2
这是一个用于删除URL最后n部分的函数:
/**
 * remove the last `$level` of directories from a path
 * example 'aaa/bbb/ccc' remove 2 levels will return aaa/
 *
 * @param $path
 * @param $level
 *
 * @return mixed
 */
public function removeLastDir($path, $level)
{
    if (is_int($level) && $level > 0) {
        $path = preg_replace('#\/[^/]*$#', '', $path);

        return $this->removeLastDir($path, (int)$level - 1);
    }

    return $path;
}

2
真的吗?正则表达式和递归?为什么不用 dirnamefor 循环呢?太简单了吗? - lxg

2
更简单的说,如果你有一个像这样的路径:
$path="/p1/p2/.../pN"

你可以使用“dirname()”函数。
echo dirname($path,L)

其中'L'代表要上升的层级。当L=1时,代表当前文件夹,L=2时是'../pN-1',当L=3时是'../pN-2'等等...

举个例子,如果你的路径是'$path="/etc/php/7.4/apache2/"',而L=2,则

echo dirname($path,2)

将输出
/etc/php/7.4/

对于 L=3

/etc/php

就是这样。


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