Почему ...
Это, вероятно, избыточно для нужд большинства людей, но оно затрагивает ряд вещей, которые не дает каждый отдельный ответ выше. Из предметов, которые он рассматривает, три из них были необходимы для моих нужд. Благодаря строгим скобкам и удалению комментариев, он все еще может оставаться читаемым всего в 13 строках кода.
Это относится к следующему:
- Влияние на производительность при использовании REGEX против strrpos / strstr / strripos / stristr.
- Использование strripos / strrpos, когда символ / строка не найдены в строке.
- Удаление с левой или правой стороны строки (первое или последнее вхождение).
- CaSe Чувствительность.
- Желание вернуть обратно исходную строку без изменений, если поиск символа / строки не найден.
Usage:
Отправка исходной строки, поиск символа / строки, "R" / "L" для начала справа или слева, true / false для чувствительности к регистру. Например, ищите «здесь» без учета регистра, в строке, начинайте с правой стороны.
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
Вывод будет "Теперь вот несколько слов". Если заменить «R» на «L», то получится: «Сейчас».
Вот функция:
function TruncStringAfterString($origString,$truncChar,$startSide,$caseSensitive)
{
if ($caseSensitive==true && strstr($origString,$truncChar)!==false)
{
// IF START RIGHT SIDE:
if (strtoupper($startSide)=="R" || $startSide==false)
{ // Found, strip off all chars from truncChar to end
return substr($origString,0,strrpos($origString,$truncChar));
}
// IF START LEFT SIDE:
elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
{ // Found, strip off all chars from truncChar to end
return strstr($origString,$truncChar,true);
}
}
elseif ($caseSensitive==false && stristr($origString,$truncChar)!==false)
{
// IF START RIGHT SIDE:
if (strtoupper($startSide)=="R" || $startSide==false)
{ // Found, strip off all chars from truncChar to end
return substr($origString,0,strripos($origString,$truncChar));
}
// IF START LEFT SIDE:
elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
{ // Found, strip off all chars from truncChar to end
return stristr($origString,$truncChar,true);
}
}
else
{ // NOT found - return origString untouched
return $origString; // Nothing to do here
}
}