代码之家  ›  专栏  ›  技术社区  ›  Timo Huovinen

在()之前删除\u

  •  0
  • Timo Huovinen  · 技术社区  · 15 年前

    (不存在致命错误的可能性)

    function remove_before($needle,$haystack){
        return substr(strstr($haystack,$needle),strlen($needle)); 
    }
    

    就像strstr($haystack,$needle),但是返回的字符串中没有针, 我不妨问一下,这是否也可以改进。。。

    function remove_after($needle,$haystack){
        return substr($haystack, 0, strrpos($haystack, $needle));
    }
    

    请注意,在最后一次针出现后移除后剥线,在第一次针出现前移除前剥线。

    例子:

    $needle = '@@';
    $haystack = 'one@@two@@three';
    remove_after($needle,$haystack);//returns one@@two
    remove_before($needle,$haystack)://returns two@@three
    

    编辑: 我将把它留在这里供其他人参考。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Powerlord    15 年前

    所写函数有两个方面:

    false 作为 substr . 我没有试过,但我很肯定这会导致运行时错误。

    remove_before strpos 速度更快,内存占用更少 strstr .

    因此:

    function remove_before($needle, $haystack){
        $pos = strpos($haystack, $needle);
        // No needle found
        if (false === $pos)
            return $haystack;
        return substr($haystack, $pos + strlen($needle));
    }
    

    remove_after :

    function remove_after($needle, $haystack){
        $pos = strrpos($haystack, $needle);
        // No needle found
        if (false === $pos)
            return $haystack;
        return substr($haystack, 0, $pos);
    }