PHP предоставляет несколько эффективных способов определить, начинается ли строка с определённой подстроки. В этой статье мы рассмотрим три распространённых подхода: использование функций substr()
, strpos()
и strncmp()
. Каждый метод имеет свои сильные и слабые стороны, что делает их подходящими для разных сценариев.
Оглавление
- Использование
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()
обычно достаточно.