Strchr: примеры (PHP)
strchr(string haystack, string needle [, bool before_needle]): string|falseОсновные сведения о функции strchr
Функция strchr в PHP находит первое вхождение подстроки в строку и возвращает часть строки, начиная с этого вхождения до конца. Данная функция является псевдонимом функции strstr, что означает их полную идентичность в работе.
Функция применяется для извлечения части строки, которая начинается с заданного символа или подстроки. Типичные сценарии использования включают обработку email-адресов, извлечение доменов, парсинг путей файлов или обработку строковых данных с определенными разделителями.
- haystack (обязательный) — строка, в которой выполняется поиск.
- needle (обязательный) — искомая подстрока или символ. Если needle не является строкой, значение преобразуется в целое число и трактуется как ASCII-код символа.
- before_needle (необязательный) — логический параметр. Если установлен в TRUE, функция возвращает часть строки haystack до первого вхождения needle (исключая needle). По умолчанию FALSE.
Короткие примеры использования strchr
echo strchr('name@example.com', '@');@example.com
echo strchr('name@example.com', '@', true);name
echo strchr('Hello World', 111); // 111 - код 'o'o World
var_dump(strchr('Hello World', 'x'));bool(false)
Похожие функции в PHP
- strstr — полный аналог strchr, рекомендуется для использования в новом коде.
- stristr — аналогична strstr, но без учета регистра символов.
- strrchr — находит последнее вхождение символа и возвращает часть строки от этого вхождения до конца.
- strpbrk — ищет любой символ из заданного набора и возвращает часть строки от первого найденного символа.
- strpos — возвращает позицию первого вхождения подстроки, а не часть строки. Часто используется вместе с substr для более гибкого извлечения.
Функцию strstr предпочтительнее применять вместо strchr для лучшей читаемости кода. Для поиска без учета регистра оптимален stristr. Если требуется найти последнее вхождение, используют strrchr. Для получения позиции подстроки больше подходит strpos.
Типичные ошибки при использовании
if (strchr('Hello', 'H')) {
echo 'Найдено';
} else {
echo 'Не найдено';
}Найдено
Ошибки нет, но важно помнить, что при неудачном поиске возвращается FALSE, а при успешном — строка, которая может трактоваться как TRUE.
var_dump(strchr('Hello', ''));Deprecated: strchr(): Passing empty string to parameter #2 ($needle) is deprecated in ...
В PHP 8.1 и выше передача пустой строки вызывает предупреждение.
echo strchr(array(), 'test');Warning: strchr() expects parameter 1 to be string, array given...
Изменения в последних версиях PHP
- PHP 8.0 — параметр needle теперь ожидает строку. Передача целого числа (ASCII-код) по-прежнему допускается, но рекомендуется явное приведение к строке.
- PHP 8.1 — передача пустой строки в параметр needle вызывает уведомление об устаревании. Ранее пустая строка возвращала FALSE.
- PHP 8.3 — существенных изменений в работе функции не внесено.
Расширенные примеры strchr
$email = 'user@example.com';
$domain = substr(strchr($email, '@'), 1);
echo $domain;example.com
$path = 'home/user/docs/file.txt';
$firstSlash = strchr($path, '/');
echo $firstSlash;/user/docs/file.txt
$data = 'key=value';
$key = strchr($data, '=', true);
$value = substr(strchr($data, '='), 1);
echo "Key: $key, Value: $value";Key: key, Value: value
$str = 'Some text with #tag';
$tag = strchr($str, '#');
if ($tag !== false) {
echo trim($tag, '# ');
} else {
echo 'Тэг не найден';
}tag
$binary = "Hello\0World";
$result = strchr($binary, "\0", true);
echo $result;Hello
Аналоги функции в других языках
Strchr в Python
Метод str.partition() разделяет строку по первому вхождению разделителя, возвращая кортеж из трех элементов.
s = 'name@example.com'
result = s.partition('@')
print(result)('name', '@', 'example.com')Strchr в Javascript
Метод String.prototype.indexOf() находит индекс первого вхождения, затем substring() извлекает часть строки.
let str = 'name@example.com';
let idx = str.indexOf('@');
let result = str.substring(idx);
console.log(result);@example.com
Strchr в MySQL
Функция SUBSTRING_INDEX() возвращает подстроку до указанного количества вхождений разделителя.
SELECT SUBSTRING_INDEX('name@example.com', '@', -1);example.com
В отличие от PHP, Python и JavaScript возвращают позицию или разделяют строку на части, требуя дополнительных операций для получения результата, аналогичного strchr. MySQL выполняет подобную задачу одной функцией, но с другим синтаксисом параметров.