Php строки которые заканчиваются на

str_ends_with

Выполняет проверку с учётом регистра, указывающую, заканчивается ли haystack подстрокой needle .

Список параметров

Подстрока для поиска в haystack .

Возвращаемые значения

Возвращает true , если haystack заканчивается подстрокой needle , false в противном случае.

Примеры

Пример #1 Использование пустой строки »

Результат выполнения данного примера:

Все строки заканчиваются пустой строкой

Пример #2 Демонстрация чувствительности к регистру

$string = ‘ленивая лиса перепрыгнула через забор’ ;

if ( str_ends_with ( $string , ‘забор’ )) echo «Строка заканчивается на ‘забор’\n» ;
>

if ( str_ends_with ( $string , ‘Забор’ )) echo ‘Строка заканчивается на «Забор»‘ ;
> else echo ‘»Забор» не найден, потому что регистр не соответствует’ ;
>

Результат выполнения данного примера:

Строка заканчивается на 'забор' "Забор" не найден, потому что регистр не соответствует

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • str_contains() — Определяет, содержит ли строка заданную подстроку
  • str_starts_with() — Проверяет, начинается ли строка с заданной подстроки
  • stripos() — Возвращает позицию первого вхождения подстроки без учёта регистра
  • strrpos() — Возвращает позицию последнего вхождения подстроки в строке
  • strripos() — Возвращает позицию последнего вхождения подстроки без учёта регистра
  • strstr() — Находит первое вхождение подстроки
  • strpbrk() — Ищет в строке любой символ из заданного набора
  • substr() — Возвращает подстроку
  • preg_match() — Выполняет проверку на соответствие регулярному выражению

User Contributed Notes 3 notes

this is the fastest php7-implementation i can think of, it should be faster than javalc6 and Reinder’s implementations, as this one doesn’t create new strings (but theirs does)

if (! function_exists ( ‘str_ends_with’ )) function str_ends_with ( string $haystack , string $needle ): bool
$needle_len = strlen ( $needle );
return ( $needle_len === 0 || 0 === substr_compare ( $haystack , $needle , — $needle_len ));
>
>
?>

In PHP7 you may want to use:

if (!function_exists(‘str_ends_with’)) function str_ends_with($str, $end) return (@substr_compare($str, $end, -strlen($end))==0);
>
>

AFAIK that is binary safe and doesn’t need additional checks.

In case you are using an older version of PHP, you can define and use the following function:

function endsWith($haystack, $needle) $length = strlen($needle);
return $length > 0 ? substr($haystack, -$length) === $needle : true;
>

Источник

Как наиболее эффективно проверить, заканчивается ли строка PHP другой строкой?

То, что сказал Ассаф, верен. Для PHP существует встроенная функция PHP.

substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0; 

Если $test больше, чем $str PHP выдаст предупреждение, поэтому вам нужно сначала проверить это.

function endswith($string, $test) < $strlen = strlen($string); $testlen = strlen($test); if ($testlen >$strlen) return false; return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0; > 

Ответ Макрумли клевый, но вместо ‘==’ следует использовать ‘===’. «===» более строг и обычно делает то, что вы хотите, в то время как «==» может привести к неприятным сюрпризам. Третий фрагмент кода mcrumley правильный, но первые два — нет. substr_compare () возвращает false в некоторых случаях ошибки. В PHP false == 0, поэтому фрагменты кода будут сигнализировать, что строка была найдена. С === этого не происходит.

Сегодня я столкнулся с ошибкой, которая сломает решение, которое вы дали из PHP 5.5.11 и далее. bugs.php.net/bug.php?id=67043

Этот метод немного дороже памяти, но быстрее:

stripos(strrev($haystack), $reversed_needle) === 0; 

Это лучше всего, когда вы точно знаете, что такое игла, поэтому вы можете жестко изменить ее. Если вы программно переверните иглу, она станет медленнее, чем предыдущий метод.

-1 Я серьезно сомневаюсь, что это быстрее, и это сложно (круто, но обычно не полезно). Если стог сена не заканчивается иглой, в худшем случае stripos будут повторять всю строку, тогда как substr_compare будет сравнивать не более длины иглы. Да, substr_compare требует вычисления длины стога сена (и намного меньшей иглы), но этот метод требует этого и полностью копирует его, и, возможно, преобразует все это в нижний регистр для загрузки.

классный подход, но неэффективный (как уже упоминалось в самом ответе) во многих случаях! Тем не менее, это очень странно для творчества и демонстрации того, что всегда может быть больше способов сделать то же самое, что вы можете себе представить. Ура!

Я проверил и нашел этот метод быстрее, чем принятый ответ. Даже если стог сена и игла меняются местами на лету, это происходит быстрее.

$endsWith = substr_compare( $str, $test, -strlen( $test ) ) === 0 

Отрицательное смещение начинается с конца строки.

+200, если бы мог. Ключевым моментом здесь является то, что использование отрицательной длины получает конечную часть строки. Вы также можете использовать substr с длиной -ve и выполнить == против $ test. Другие ответы плохие.

Вот простой способ проверить, заканчивается ли одна строка другим, предоставив strpos смещение вправо, где должна быть найдена строка:

function stringEndsWith($whole, $end)

Прямо, и я думаю, что это работает на PHP 4.

Это зависит от того, какую эффективность вы заботитесь.

Ваша версия использует больше памяти из-за дополнительной копии из использования substr.

Альтернативная версия может искать исходную строку для последнего вхождения подстроки без создания копии, но, вероятно, будет медленнее из-за большего количества тестов.

Вероятно, наиболее эффективным способом является выполнение цикла char -by- char из позиции -sterlen (test) до конца строки и сравнения. Это минимальное количество сравнений, которое вы можете надеяться сделать, и вряд ли какая-либо дополнительная память будет использоваться.

Источник

Какова самая эффективная проверка того, заканчивается ли строка PHP другой строкой?

Стандартный PHP-способ проверить, заканчивается ли строка $str с помощью подстроки $test :

$endsWith = substr( $str, -strlen( $test ) ) == $test 

То, что сказал Ассаф, верен. Для этого есть встроенная функция PHP.

substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0; 

Если $test длиннее $str PHP даст предупреждение, поэтому вам нужно сначала проверить это.

function endswith($string, $test) < $strlen = strlen($string); $testlen = strlen($test); if ($testlen >$strlen) return false; return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0; > 

Этот метод немного дороже памяти, но он быстрее:

stripos(strrev($haystack), $reversed_needle) === 0; 

Это лучше всего, когда вы точно знаете, что такое игла, поэтому вы можете жестко изменить ее. Если вы программно переверните иглу, она станет медленнее, чем предыдущий метод.

$endsWith = substr_compare( $str, $test, -strlen( $test ) ) === 0 

Отрицательное смещение «начинает отсчет с конца строки».

Это зависит от того, какую эффективность вы заботитесь.

Ваша версия использует больше памяти из-за дополнительной копии с использованием substr.

Альтернативная версия может искать исходную строку для последнего вхождения подстроки без копирования, но, вероятно, будет медленнее из-за большего тестирования.

Вероятно, наиболее эффективным способом является выполнение char char-by-char с позиции -sterlen (test) до конца строки и сравнения. Это минимальное количество сравнений, которое вы можете надеяться сделать, и вряд ли какая-либо дополнительная память используется.

Вот простой способ проверить, заканчивается ли одна строка с другой, предоставляя strpos смещение прямо там, где должна быть найдена строка:

function stringEndsWith($whole, $end)

Прямо, и я думаю, что это сработает на PHP 4.

Другой способ – использовать функцию strrpos :

strrpos($str, $test) == strlen($str) - strlen($test) 

Я надеюсь, что приведенный ниже ответ может быть эффективным и простым:

$content = "The main string to search"; $search = "search"; //For compare the begining string with case insensitive. if(stripos($content, $search) === 0) echo 'Yes'; else echo 'No'; //For compare the begining string with case sensitive. if(strpos($content, $search) === 0) echo 'Yes'; else echo 'No'; //For compare the ending string with case insensitive. if(stripos(strrev($content), strrev($search)) === 0) echo 'Yes'; else echo 'No'; //For compare the ending string with case sensitive. if(strpos(strrev($content), strrev($search)) === 0) echo 'Yes'; else echo 'No'; 

Не знаю, быстро ли это или нет, но для одного теста на символ, эти работы тоже:

(array_pop(str_split($string)) === $test) ? true : false; ($string[strlen($string)-1] === $test) ? true : false; (strrev($string)[0] === $test) ? true : false; 

Я думаю, что обратные функции, такие как strrchr (), помогут вам быстрее совместить конец строки.

Это чистый PHP, без вызова внешних функций, кроме strlen .

function endsWith ($ends, $string) < $strLength = strlen ($string); $endsLength = strlen ($ends); for ($i = 0; $i < $endsLength; $i++) < if ($string [$strLength - $i - 1] !== $ends [$i]) return false; >return true; > 

Источник

Читайте также:  background-color
Оцените статью