remove_before () - PullRequest
       1

remove_before ()

0 голосов
/ 04 августа 2010

Есть ли лучший способ сделать ниже? (без возможности фатальной ошибки)

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 Ответ

1 голос
/ 04 августа 2010

В функциях написано две вещи:

У них нет обработки ошибок. Например, в remove_before: needle не в стоге сена заставляет его передать 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...