我有一条完整的路径,我想删除它的某些级别。例如,
/home/john/smith/web/test/testing/nothing/
我想摆脱4个级别,所以我得到了
/test/testing/nothing/
这样做会有什么好处?
由于
答案 0 :(得分:7)
一个简单的解决方案是将路径切割成部分,然后再操作数组,然后再将它重新粘合在一起:
join("/", array_slice(explode("/", $path), 5));
当然,如果您想删除该特定路径,您还可以使用正则表达式:
preg_replace('~^/home/john/smith/web/~', '', $path);
虽然有一个建议。如果您的应用程序经常使用路径,那么创建一个表示路径的类可能是个好主意,以便封装逻辑,而不是在整个地方进行大量的字符串操作。如果你混合绝对路径和相对路径,这尤其是一个好主意。
答案 1 :(得分:-2)
为什么你们都使用正则表达式来完成不需要匹配的东西; CPU周期很有价值!
str_replace会更有效率:
$s_path = '/home/john/smith/web/test/testing/nothing/';
$s_path = str_replace('john/smith/web/test/', '', $s_path);
并使用realpath()
解析任何'../../'
路径。
请记住dirname(__FILE__)
获取CWD,rtrim()
对于删除尾部斜杠非常有用..