- Работа со строками в PHP
- Количество символов
- Получить длину строки
- Количество символов без пробелов
- Количество слов с строке
- Получить количество переносов в строке
- Количество букв в строке
- Количество цифр в строке
- Количество знаков препинания
- Количество пробелов в строке
- Количество пробелов в начале строки:
- Количество пробелов в конце строки:
- Поиск
- Получить количество вхождений подстроки
- Найти позицию первого вхождения подстроки
- Найти позицию последнего вхождения подстроки
- Найти все вхождения подстроки
- Извлечение из текста
- Начало строки
- Получить первый символ:
- Получить три первых символа:
- Получить первое слово:
- Получить все после первого слова:
- Конец строки
- Получить последний символ:
- Получить три последних символа:
- Получить последнее слово:
- Получить всё до последнего слова:
- Середина строки
- Получить второе слово:
- Получить текст до дефиса:
- Получить текст после дефиса:
- Переносы строк
- Получить первую строку:
- Получить последнюю строку:
- Пилучить символы из ковычек и скобок
- Замена в строках
- Заменить первый символ:
- Заменить три первых символа:
- Заменить последний символ:
- Заменить три последних символа:
- Замена символов и слов в строке
- Заменить пробелы:
- Заменить слово:
- Заменить всё до дефиса:
- Заменить всё после дефиса:
- Добавление в строки
- Добавить строку после 10-го символа:
- Добавить перед словом:
- Добавить после слова:
- Вставить строку между всех символов
- Дописать строку до нужной длины
- Дописать стркуку слева:
- Дописать строку справа:
- Дописать строку с обеих сторон:
- Удаление из строк
- Удаление в начале строки
- Удалить первый символ:
- Удалить первые 3 символа:
- Удалить первое слово:
- Удаление в конце строки
- Удалить последний символ:
- Удалить три последних символа:
- Удалить последнее слово:
- Удаление подсторк
- Удалить всё перед сиволом:
- Удалить всё после сивола:
Работа со строками в PHP
Обзор PHP-функций для работы со строками и практическое их применение с учетом кодировки UTF-8.
Количество символов
Получить длину строки
Функция strlen($string) возвращает длину строки, но возвращает неправильный результат если в строке есть кириллица в UTF-8, поэтому нужно использовать mb_strlen() .
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo strlen($text); // 105 echo mb_strlen($text); // 59
Количество символов без пробелов
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $str = mb_ereg_replace('[\s]', '', $text); echo mb_strlen($str); // 49
Количество слов с строке
Функция str_word_count() возвращает количество слов в строке, но символы обрамленные пробелами будет считаться за слово, например « — ». Так же функция не работает с UTF-8, как видно в примере:
$text = 'Lorem Ipsum - is simply dummy!'; echo str_word_count($text); // 6 $text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo str_word_count($text); // 1
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $str = preg_replace("/[[:punct:]]/", '', $text); $str = mb_ereg_replace('[\s]+', ' ', $str); $words = explode(' ', $str); echo count($words); // 10
Получить количество переносов в строке
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo substr_count($text, PHP_EOL); // 2
Количество букв в строке
$text = 'Съешь ещё этих мягких французских булок, да выпей же чаю.'; echo $str = preg_replace('/[^a-zа-яё]/ui', '', $text); echo mb_strlen($str); // 46
Количество цифр в строке
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $str = preg_replace('/[^0-9]/ui', '', $text); echo mb_strlen($str); // 0
Количество знаков препинания
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $str = preg_replace("/[^[:punct:]]/", '', $text); echo mb_strlen($str); // 3
Количество пробелов в строке
Или количество вхождений любого другого символа или подстроки.
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo substr_count($text, ' '); // 10
Количество пробелов в начале строки:
$text = ' Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo mb_strlen($text) - mb_strlen(ltrim($text, ' ')); // 5
Количество пробелов в конце строки:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю. '; echo mb_strlen($text) - mb_strlen(rtrim($text, ' ')); // 3
Поиск
Получить количество вхождений подстроки
$text = 'Съешь ещё - этих мягких французских булок, да ещё выпей же чаю.'; echo mb_substr_count($text, 'ещё'); // 2
Найти позицию первого вхождения подстроки
$text = 'Съешь ещё - этих мягких французских булок, да ещё выпей же чаю.'; echo mb_strpos($text, 'ещё'); // 6 // Без учета регистра: $text = 'Съешь ещё - этих мягких французских булок, да ещё выпей же чаю.'; echo mb_stripos($text, 'ещё'); // 6
Найти позицию последнего вхождения подстроки
$text = 'Съешь ещё - этих мягких французских булок, да ещё выпей же чаю.'; echo mb_strrpos($text, 'ещё'); // 46 // Без учета регистра: $text = 'Съешь ещё - этих мягких французских булок, да ещё выпей же чаю.'; echo mb_strirpos($text, 'ещё'); // 46
Найти все вхождения подстроки
$text = 'Съешь ещё - этих мягких французских булок, да ещё выпей же чаю.'; $offset = 0; $allpos = array(); while (($pos = mb_strpos($text, 'ещё', $offset)) !== false) < $offset = $pos + 1; $allpos[] = $pos; >print_r($allpos); // Array ([0] => 6 [1] => 46)
Извлечение из текста
Начало строки
Получить первый символ:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo mb_substr($text, 0, 1); // С
Получить три первых символа:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo mb_substr($text, 0, 3); // Съе
Получить первое слово:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo mb_strstr($text, ' ', true); // Съешь
Получить все после первого слова:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo mb_strstr($text, ' ', false); // ещё - этих мягких французских булок, да выпей же чаю.
Конец строки
Получить последний символ:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo mb_substr($text, -1, 1); // .
Получить три последних символа:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo mb_substr($text, -1, 3); // аю.
Получить последнее слово:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $array = explode(' ', $text); echo end($array); // чаю.
Получить всё до последнего слова:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $str = mb_substr($text, 0, mb_strrpos($text, ' ')); echo $str; // Съешь ещё - этих мягких французских булок, да выпей же
Середина строки
Получить второе слово:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $array = explode(' ', $text); echo $array[1]; // ещё
Получить текст до дефиса:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; echo mb_substr($text, 0, mb_strpos($text, ' - ')); // Съешь ещё
Получить текст после дефиса:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $str = mb_substr($text, mb_strpos($text, ' - ') + mb_strlen(' - '), -1); echo $str; // этих мягких французских булок, да выпей же чаю
Переносы строк
Получить первую строку:
$text = 'Разнообразный опыт укрепление и развитие структуры требуют определения направлений прогрессивного развития! Не следует забывать, что постоянный рост и сфера активности в степени обуславливает создание системы обучения кадров? С другой стороны дальнейшее развитие различных форм влечет за собой процесс внедрения и модернизации.'; $pos = mb_strpos($text, "\n"); $str = trim(mb_substr($text, 0, $pos)); echo $str; // Разнообразный опыт укрепление и развитие структуры требуют // или $lines = explode("\n", $text); echo $lines[0]; // Разнообразный опыт укрепление и развитие структуры требуют
Получить последнюю строку:
$text = 'Разнообразный опыт укрепление и развитие структуры требуют определения направлений прогрессивного развития! Не следует забывать, что постоянный рост и сфера активности в степени обуславливает создание системы обучения кадров? С другой стороны дальнейшее развитие различных форм влечет за собой процесс внедрения и модернизации.'; $pos = mb_strrpos($text, "\n"); $str = trim(mb_substr($text, $pos)); echo $str; // форм влечет за собой процесс внедрения и модернизации. // или $lines = explode("\n", $text); echo end($lines); // форм влечет за собой процесс внедрения и модернизации.
Пилучить символы из ковычек и скобок
$text = '\'Съешь\' "ещё" «этих» [мягких] (французских) '; // '. ' preg_match_all("/\'(.+?)\'/", $text, $matches); echo $matches[1][0]; // Съешь // ". " preg_match_all("/\"(.+?)\"/", $text, $matches); echo $matches[1][0]; // ещё // «. » preg_match_all("/«(.+?)»/", $text, $matches); echo $matches[1][0]; // этих // [. ] preg_match_all("/\[(.+?)\]/", $text, $matches); echo $matches[1][0]; // мягких // (. ) preg_match_all("/\((.+?)\)/", $text, $matches); echo $matches[1][0]; // французских // preg_match_all("/\<(.+?)\>/", $text, $matches); echo $matches[1][0]; // булок // preg_match_all("/<(.+?)>/", $text, $matches); echo $matches[1][0]; // да
Замена в строках
Функция substr_replace($search, $replace, $subject, $count) – заменяет часть строки, также не раотает с кирилицей в кодировке UTF-8, в библиатеке mb_string её нет, поэтому приходится использовать пользовольскую функцию:
if (!function_exists('mb_substr_replace')) < function mb_substr_replace($original, $replacement, $position, $length) < $startString = mb_substr($original, 0, $position, 'UTF-8'); $endString = mb_substr($original, $position + $length, mb_strlen($original), 'UTF-8'); $out = $startString . $replacement . $endString; return $out; >>
Заменить первый символ:
$text = 'Съешь ещё - этих мягких французских булок.'; echo mb_substr_replace($text, '!', 0, 1); // !ъешь ещё - этих мягких французских булок.
Заменить три первых символа:
$text = 'Съешь ещё - этих мягких французских булок.'; echo mb_substr_replace($text, '. ', 0, 3); // . шь ещё - этих мягких французских булок.
Заменить последний символ:
$text = 'Съешь ещё - этих мягких французских булок.'; echo mb_substr_replace($text, '!', -1, 0); // Съешь ещё - этих мягких французских булок!
Заменить три последних символа:
$text = 'Съешь ещё - этих мягких французских булок.'; echo mb_substr_replace($text, '. ', -3, 0); // Съешь ещё - этих мягких французских бул.
Замена символов и слов в строке
Для этой задачи подходит функция str_replace($search, $replace, $subject), которая работает со всеми кодировками.
Заменить пробелы:
$text = 'Съешь ещё - этих мягких французских булок.'; echo str_replace(' ', '-', $text); // Съешь-ещё---этих-мягких-французских-булок.
Заменить слово:
$text = 'Съешь ещё - этих мягких французских булок.'; echo str_replace('мягких', 'твердых', $text); // Съешь ещё - этих твердых французских булок.
Заменить всё до дефиса:
$text = 'Съешь ещё - этих мягких французских булок.'; $str = 'Не ешь' . mb_substr($text, mb_strpos($text, ' - '), -1); echo $str; // Не ешь - этих мягких французских булок
Заменить всё после дефиса:
$text = 'Съешь ещё - этих мягких французских булок.'; $str = mb_substr($text, 0, mb_strpos($text, ' - ') + 3) . 'печенек'; echo $str; // Съешь ещё - печенек
Добавление в строки
Добавить строку после 10-го символа:
$text = 'Съешь ещё - этих мягких французских булок.'; $str = mb_substr_replace($text, '. ', 10, 0); echo $str; // Съешь ещё . - этих мягких французских булок.
Добавить перед словом:
$text = 'Съешь ещё - этих мягких французских булок.'; $str = str_replace(' ещё ', ' же ещё ', $text); echo $str; // Съешь же ещё - этих мягких французских булок.
Добавить после слова:
$text = 'Съешь ещё - этих мягких французских булок.'; $str = str_replace(' ещё ', ' ещё немного ', $text); echo $str; // Съешь ещё немного - этих мягких французских булок.
Вставить строку между всех символов
Для того чтобы вставить символ между всех символов в строке понадобится функция str_split($string) для пробразавания строки в массив, она также не работает с кирилицей. С версии PHP 7.4 появилась функция mb_str_split() , для более ранних версий:
if (!function_exists('mb_str_split')) < function mb_str_split($str, $l = 0) < if ($l >0) < $ret = array(); $len = mb_strlen($str, "UTF-8"); for ($i = 0; $i < $len; $i += $l) < $ret[] = mb_substr($str, $i, $l, "UTF-8"); >return $ret; > return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); > >
$text = 'Съешь ещё - этих мягких французских булок.'; $array = mb_str_split($text);; $new = implode(' ', $array); echo $new; // С ъ е ш ь е щ ё - э т и х м я г к и х ф р а н ц у з с к и х б у л о к .
Дописать строку до нужной длины
Функция str_pad($string, $length, $pad_string, $pad_type) дополняет строку другой строкой до заданной длины.
if (!function_exists('mb_str_pad')) < function mb_str_pad($input, $pad_length, $pad_string = ' ', $pad_type = STR_PAD_RIGHT) < $diff = strlen($input) - mb_strlen($input); return str_pad($input, $pad_length + $diff, $pad_string, $pad_type); >>
Дописать стркуку слева:
$text = 'Привет Мир'; echo mb_str_pad($text, 20, '-', STR_PAD_LEFT); // ----------Привет Мир
Дописать строку справа:
$text = 'Привет Мир'; echo mb_str_pad($text, 20, '-', STR_PAD_RIGHT); // Привет Мир----------
Дописать строку с обеих сторон:
$text = 'Привет Мир'; echo mb_str_pad($text, 20, '-', STR_PAD_BOTH); // -----Привет Мир-----
Удаление из строк
Удаление в начале строки
Удалить первый символ:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = mb_substr($text, 1); echo $new; // ъешь ещё - этих мягких французских булок, да выпей же чаю.
Удалить первые 3 символа:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = mb_substr($text, 3); echo $new; // шь ещё - этих мягких французских булок, да выпей же чаю.
Удалить первое слово:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = mb_substr($text, mb_strpos($text, ' ')); echo $new; // ещё - этих мягких французских булок, да выпей же чаю.
Удаление в конце строки
Удалить последний символ:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = mb_substr($text, 0, -1); echo $new; // Съешь ещё - этих мягких французских булок, да выпей же чаю
Удалить три последних символа:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = mb_substr($text, 0, -3); echo $new; // Съешь ещё - этих мягких французских булок, да выпей же ч
Удалить последнее слово:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = mb_substr($text, 0, mb_strrpos($text, ' ')); echo $new; // Съешь ещё - этих мягких французских булок, да выпей же
Удаление подсторк
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = str_replace(' мягких', '', $text); echo $new; // Съешь ещё - этих французских булок, да выпей же чаю.
Удалить всё перед сиволом:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = strstr($text, '-'); echo $new; // - этих мягких французских булок, да выпей же чаю.
Удалить всё после сивола:
$text = 'Съешь ещё - этих мягких французских булок, да выпей же чаю.'; $new = strstr($text, '-', true); echo $new; // Съешь ещё // Второй вариант: $pos = mb_strpos($text, '-'); $new = mb_substr($text, 0, $pos + 1); echo $new; // Съешь ещё -