PHP函数用于删除子字符串之前的所有内容(包含选项)

时间:2016-11-21 20:06:33

标签: php string function substring

我需要帮助制作一个PHP功能。我想创建一个函数,删除字符串中特定单词或字符之前的所有内容。我知道如何做这个部分,但我不熟悉它的功能,我需要为它添加一个选项...例如。如果我有这个字符串......

$str="I like to eat cheese, crackers and ham";

我希望在干酪这个词之前删除所有内容我可以使用它......

if(($pos=strpos($str,'cheese'))!== false) $str=substr($str,$pos);

我最终会以

结束
  

奶酪,饼干和火腿

如果我想在删除中包含干酪这个词,我可以使用......

if(($pos=strpos($str,'cheese'))!== false) $str=substr($str,$pos+6);

最后的+6是“奶酪”这个词的长度。我会得到......

  

,饼干和火腿

我希望能够使用名为remove_before的函数来获取我的新字符串,就像这样......

$str=remove_before("cheese",$str,0);

第三个变量将指示您是否还要删除您要查找的单词。这里的零意味着,删除干酪之前的所有内容,而1意味着删除干酪字及其前的所有内容。 谢谢。

3 个答案:

答案 0 :(得分:2)

您正在寻找的是这样的:

<?php
function remove_before($needle, $haystack, $removeNeedle=false) {

    $pos = strpos($haystack, $needle);

    if (($pos !== false)) {
        return substr($haystack, $pos + (strlen($needle) * $removeNeedle));
    }

    return $haystack; // if word not found, return full string.
}

$needle = "cheese";
$haystack = "I like to eat cheese, crackers and ham";

echo remove_before($needle, $haystack, false);
?>

$pos + (strlen($needle)*$removeNeedle) $ removeNeedle是一个布尔值,意味着它的值是1或0.如果乘以1,则value是值,如果乘以0,则值为0.所以基本上,你乘以针的长度为1或0。

最后的布尔值是可选的,因为它的默认值是false。

代码由我编写,无限制地免费使用。

答案 1 :(得分:1)

<?php
$str = "I like to eat cheese, crackers and ham";

function remove_before($needle, $haystack, $include = false)
{
    $pos = strpos($haystack, $needle);
    if ($pos !== false) {
        if (!$include) {
            $pos += strlen($needle);
        }
        return substr($haystack, $pos, strlen($haystack));
    }
    return null;
}

echo remove_before('cheese', $str, true);
echo remove_before('cheese', $str);

> cheese, crackers and ham
> , crackers and ham

查看有关创建函数http://php.net/manual/en/functions.user-defined.php

的文档

但是,请查看将参数传递给函数http://php.net/manual/en/functions.arguments.php

的文档

您希望在第二个链接中注意的是传递默认参数。这允许您为$ arg设置默认值,当未手动设置时,默认值为默认值。这允许PHP模拟其他语言的函数重载。

同样重要的是在函数内部进行某种错误检查,具体取决于默认设置,我的示例假设用户将传递一个布尔值。

答案 2 :(得分:0)

function remove_before ($needle, $haystack, $isNotIncluded) {
  if(($pos=strpos($haystack,$needle))!== false) 
    $haystack=substr($haystack,$isNotIncluded?$pos + strlen ($needle) :$pos);
  return $haystack;
}

//对不起,我正在Galaxy s6上打字,所以我还是没有检查它。请尝试并仔细检查substr,strlen ...我只是给你基本功能synstax。