我有一个字符串,可以用多种不同的方式编写,它总是遵循相同的模式,但它的长度可以不同。
this/is/the/path/to/my/fileA.php
this/could/also/be/the/path/to/my/fileB.php
another/example/of/a/long/address/which/is/a/path/to/my/fileC.php
我要做的是剪切字符串,以便我留下
path/to/my/file.php
我有一些代码which I got from this page并将其修改为以下
$max = strlen($full_path);
$n = 0;
for($j=0;$j<$max;$j++){
if($full_path[$j]=='/'){
$n++;
if($n>=3){
break 1;
}
}
}
$path = substr($full_path,$j+1,$max);
这基本上是在'/'字符的第3个实例中剪切它,并给我剩下的东西。当我在一个环境中工作时,这很好,但是当我将它迁移到另一个服务器时,路径会更长,因此剪切会给我太长的地址。我认为,不是为每个实例更改硬编码整数值,如果我在最后一个实例的第4个字符串处剪切字符串,它会更好用,因为我总是希望保留最后4个斜杠的信息
非常感谢
编辑 - 最终代码解决方案
$exploded_name = explode('/', $full_path);
$exploded_trimmed = array_slice($exploded_name, -4);
$imploded_name = implode('/', $exploded_trimmed);
答案 0 :(得分:0)
只需对你的字符串使用explode,如果pattern总是相同,那么获取数组的最后一个元素并完成你的工作
$pizza = "piece1/piece2/piece3/piece4/piece5/piece6";
$pieces = explode("/", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
然后反转你的数组获得数组的前四个元素并使用“implode”组合它们 获得所需的字符串
答案 1 :(得分:0)
下面的这个函数可以像第n次出现的子函数一样工作
function substr_after_nth($str, $needle, $key)
{
$array = explode($needle, $str);
$temp = array();
for ($i = $key; $i < count($array); $i++) {
$temp[] = $array[$i];
}
return implode($needle, $temp);
}
实施例
$str = "hello-world-how-are-you-doing";
第四次发生“ - ”之后的substr得到“你在做什么” 将上述函数称为
echo substr_after_nth($str, "-", 4);
将导致
you-doing