2013-04-26 125 views
0

我有一个字符串,可以用多种不同的方式写入,它将始终遵循相同的模式,但其长度可能不同。在PHP中剪切字符串,在第n个字符中出现的字符

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); 

这基本上在'/'字符的第三个实例中将其切断,并给我留下的内容。当我在一个环境中工作时,这很好,但是当我将它迁移到另一台服务器时,路径会更长,所以剪切会给我一个太长的地址。我认为,不是每个实例都改变硬编码的整数值,如果我在最后一次删除第4个字符串时会更好,因为我总是希望保留最后4个斜杠的信息

非常感谢

编辑 - 最终代码解决方案

$exploded_name = explode('/', $full_path); 
$exploded_trimmed = array_slice($exploded_name, -4); 
$imploded_name = implode('/', $exploded_trimmed); 

回答

0

只需使用你的字符串爆炸,如果图案是始终不变的则获取数组的最后一个元素,你的工作就完成了

$pizza = "piece1/piece2/piece3/piece4/piece5/piece6"; 
$pieces = explode("/", $pizza); 
echo $pieces[0]; // piece1 
echo $pieces[1]; // piece2 

然后扭转你的阵列获得数组的前四个元素,并使用结合他们“内爆” ,从而获得所需的字符串

+0

谢谢你,这就是做的好得多方式的功能,我已经编辑我的问题的确切答案 – 2013-04-26 11:22:16

0

下面这个函数可以工作就像从第n次出现一个SUBSTR开始

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在第4次出现“ - ”后得到“you-doi NG” 拨打以上为

echo substr_after_nth($str, "-", 4); 

会导致作为

you-doing 
相关问题