PHP String Functions

Эффективная проверка начальных подстрок в PHP

Spread the love

PHP предоставляет несколько эффективных способов определить, начинается ли строка с определённой подстроки. В этой статье мы рассмотрим три распространённых подхода: использование функций substr(), strpos() и strncmp(). Каждый метод имеет свои сильные и слабые стороны, что делает их подходящими для разных сценариев.

Оглавление

Использование substr() для проверки на начальную подстроку

Функция substr() извлекает часть строки. Мы можем использовать это, чтобы проверить, совпадает ли начало строки с нашей целевой подстрокой. Этот подход прост и понятен.


<?php

function startsWithSubstr(string $haystack, string $needle): bool {
  return substr($haystack, 0, strlen($needle)) === $needle;
}

$string = "This is a test string.";
$substring = "This";

if (startsWithSubstr($string, $substring)) {
  echo "'$string' starts with '$substring'n";
} else {
  echo "'$string' does not start with '$substring'n";
}

$string2 = "Another test string.";
$substring2 = "Test";

if (startsWithSubstr($string2, $substring2)) {
  echo "'$string2' starts with '$substring2'n";
} else {
  echo "'$string2' does not start with '$substring2'n";
}

?>

Этот код извлекает часть $haystack длиной $needle, начиная с индекса 0. Затем он выполняет строгое сравнение (===), чтобы убедиться, что совпадают и тип, и значение. Этот метод эффективен для коротких подстрок.

Использование strpos() для проверки на начальную подстроку

Функция strpos() находит позицию первого вхождения подстроки. Если подстрока находится в начале, её позиция будет 0.


<?php

function startsWithPos(string $haystack, string $needle): bool {
  //strpos возвращает false, если needle не найден, поэтому мы используем !== вместо !=
  return strpos($haystack, $needle) === 0;
}

$string = "This is a test string.";
$substring = "This";

if (startsWithPos($string, $substring)) {
  echo "'$string' starts with '$substring'n";
} else {
  echo "'$string' does not start with '$substring'n";
}

$string2 = "Another test string.";
$substring2 = "Test";

if (startsWithPos($string2, $substring2)) {
  echo "'$string2' starts with '$substring2'n";
} else {
  echo "'$string2' does not start with '$substring2'n";
}

?>

Это краткий и часто используемый метод. Строгое сравнение (=== 0) имеет решающее значение, поскольку strpos() возвращает false, если подстрока не найдена.

Использование strncmp() для проверки на начальную подстроку

Функция strncmp() сравнивает части двух строк. Она особенно полезна для регистрозависимых сравнений или при проверке только определённого количества символов.


<?php

function startsWithStrncmp(string $haystack, string $needle): bool {
  return strncmp($haystack, $needle, strlen($needle)) === 0;
}

$string = "This is a test string.";
$substring = "This";

if (startsWithStrncmp($string, $substring)) {
  echo "'$string' starts with '$substring'n";
} else {
  echo "'$string' does not start with '$substring'n";
}

$string2 = "Another test string.";
$substring2 = "Test";

if (startsWithStrncmp($string2, $substring2)) {
  echo "'$string2' starts with '$substring2'n";
} else {
  echo "'$string2' does not start with '$substring2'n";
}

?>

strncmp() сравнивает первые strlen($needle) символов $haystack с $needle. Значение возврата 0 означает, что они идентичны. Эта функция эффективна и предлагает больший контроль.

Выбор правильного метода

Для простоты и читаемости с короткими подстроками, substr() — хороший выбор. strpos() обеспечивает краткое и эффективное решение для большинства случаев. strncmp() предлагает большую гибкость, особенно для регистрозависимых сравнений или при ограничении сравнения определённым количеством символов. Для очень больших строк он может обеспечить небольшое преимущество в производительности, но для большинства распространённых случаев использования strpos() обычно достаточно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *