функции functionsWith () и окончание () в PHP

Вы не можете. Объекты в векторе будут sliced ​​ - любые данные экземпляра производного класса будут отрублены, поэтому вызов метода будет очень плохой идеей.

Если , с другой стороны, у вас есть вектор указателей для базы, тогда вы просто вызываете виртуальный метод и вызывается версия производного класса.

1361
задан Ivar 3 February 2018 в 16:31
поделиться

8 ответов

function startsWith($haystack, $needle)
{
     $length = strlen($needle);
     return (substr($haystack, 0, $length) === $needle);
}

function endsWith($haystack, $needle)
{
    $length = strlen($needle);
    if ($length == 0) {
        return true;
    }

    return (substr($haystack, -$length) === $needle);
}

Используйте это, если вы не хотите использовать регулярное выражение.

1518
ответ дан 22 November 2019 в 20:19
поделиться

Без копий и no-intern-loop:

function startsWith($string, $start)
{
    return strrpos($string, $start, -strlen($string)) !== false;
}

function endsWith($string, $end)
{
    return ($offset = strlen($string) - strlen($end)) >= 0
        && strpos($string, $end, $offset) !== false;
}
1
ответ дан 22 November 2019 в 20:19
поделиться
function startsWith($haystack, $needle, $case = true) {
    if ($case) {
        return (strcmp(substr($haystack, 0, strlen($needle)), $needle) === 0);
    }
    return (strcasecmp(substr($haystack, 0, strlen($needle)), $needle) === 0);
}

function endsWith($haystack, $needle, $case = true) {
    if ($case) {
        return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0);
    }
    return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0);
}

Кредит :

Проверить, заканчивается ли строка другой строкой

Проверить, начинается ли строка другой строкой

46
ответ дан 22 November 2019 в 20:19
поделиться

Все ответы на данный момент, похоже, выполняют кучу ненужной работы, вычисления strlen , выделения строк (substr) и т. Д. ' Функции strpos ' и ' stripos ' возвращают индекс первого вхождения $ Need в $ haystack :

function startsWith($haystack,$needle,$case=true)
{
    if ($case)
        return strpos($haystack, $needle, 0) === 0;

    return stripos($haystack, $needle, 0) === 0;
}

function endsWith($haystack,$needle,$case=true)
{
    $expectedPosition = strlen($haystack) - strlen($needle);

    if ($case)
        return strrpos($haystack, $needle, 0) === $expectedPosition;

    return strripos($haystack, $needle, 0) === $expectedPosition;
}
136
ответ дан 22 November 2019 в 20:19
поделиться

Функции регулярного выражения выше, но с другие настройки, также предложенные выше:

 function startsWith($needle, $haystack) {
     return preg_match('/^' . preg_quote($needle, '/') . '/', $haystack);
 }

 function endsWith($needle, $haystack) {
     return preg_match('/' . preg_quote($needle, '/') . '$/', $haystack);
 }
28
ответ дан 22 November 2019 в 20:19
поделиться

Я понимаю, что это было закончено, но вы можете посмотреть на strncmp , поскольку он позволяет вам указать длину строки для сравнения, поэтому:

function startsWith($haystack, $needle, $case=true) {
    if ($case)
        return strncasecmp($haystack, $needle, strlen($needle)) == 0;
    else
        return strncmp($haystack, $needle, strlen($needle)) == 0;
}    
16
ответ дан 22 November 2019 в 20:19
поделиться

Основываясь на ответе Джеймса Блэка, вот его endWith version:

function startsWith($haystack, $needle, $case=true) {
    if ($case)
        return strncmp($haystack, $needle, strlen($needle)) == 0;
    else
        return strncasecmp($haystack, $needle, strlen($needle)) == 0;
}

function endsWith($haystack, $needle, $case=true) {
     return startsWith(strrev($haystack),strrev($needle),$case);

}

Примечание: я заменил часть if-else на функцию Джеймса Блэка startWith, потому что strncasecmp на самом деле является нечувствительной к регистру версией strncmp.

2
ответ дан 22 November 2019 в 20:19
поделиться

Если для вас важна скорость, попробуйте это. (Я считаю, что это самый быстрый метод)

Работает только для строк, и если $ haystack состоит только из 1 символа

function startsWithChar($needle, $haystack)
{
   return ($needle[0] === $haystack);
}

function endsWithChar($needle, $haystack)
{
   return ($needle[strlen($needle) - 1] === $haystack);
}

$str='|apples}';
echo startsWithChar($str,'|'); //Returns true
echo endsWithChar($str,'}'); //Returns true
echo startsWithChar($str,'='); //Returns false
echo endsWithChar($str,'#'); //Returns false
22
ответ дан 22 November 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: