【问题标题】:Cut string in PHP at nth-from-end occurrence of character在第 n 个字符出现处剪切 PHP 中的字符串
【发布时间】:2013-04-26 11:00:59
【问题描述】:

我有一个可以用多种不同方式编写的字符串,它总是遵循相同的模式,但它的长度可以不同。

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

【问题讨论】:

    标签: php string substring


    【解决方案1】:

    只需对您的字符串使用explode,如果模式始终相同,则获取数组的最后一个元素,您的工作就完成了

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

    然后反转您的数组,获取数组的前四个元素并使用 "implode" 组合它们 得到想要的字符串

    【讨论】:

    • 谢谢,这是一种更好的方法,我已经编辑了我的问题以获得确切的答案
    【解决方案2】:

    下面的这个函数可以像从第 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-doing” 将上面的函数调用为

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

    结果是

    you-doing
    

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 2019-03-01
      • 2015-06-13
      • 1970-01-01
      • 2013-01-14
      • 2018-10-16
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      相关资源
      最近更新 更多