Strchr: примеры (PHP)

Использование 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
С параметром before_needle
echo strchr('name@example.com', '@', true);
name
Поиск символа по ASCII-коду
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
Пример php
$email = 'user@example.com';
$domain = substr(strchr($email, '@'), 1);
echo $domain;
example.com
Обработка нескольких вхождений
Пример php
$path = 'home/user/docs/file.txt';
$firstSlash = strchr($path, '/');
echo $firstSlash;
/user/docs/file.txt
Разделение строки до и после разделителя
Пример php
$data = 'key=value';
$key = strchr($data, '=', true);
$value = substr(strchr($data, '='), 1);
echo "Key: $key, Value: $value";
Key: key, Value: value
Цепочка вызовов с проверкой
Пример php
$str = 'Some text with #tag';
$tag = strchr($str, '#');
if ($tag !== false) {
    echo trim($tag, '# ');
} else {
    echo 'Тэг не найден';
}
tag
Работа с бинарными данными
Пример php
$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 выполняет подобную задачу одной функцией, но с другим синтаксисом параметров.

PHP strchr function comments

En
Strchr Alias of strstr