Урок 7. Работа со строковыми функциями в PHP
Теория
Методы и функции: strtolower, strtoupper, ucfirst, lcfirst, ucwords, strlen, substr, str_replace, strtr, substr_replace, strpos, strrpos, strstr, explode, implode, str_split, trim, ltrim, rtrim, strrev, str_shuffle, number_format, str_repeat, htmlspecialchars, strip_tags, chr, ord, str_word_count, substr_count, count_chars, strchr, strrchr
Все функции работы с регистром: ucfirst, lcfirst, strtoupper, strtolower, ucwords.
Функция strtolower
Функция strtolower преобразовывает строку в нижний регистр.
Данная функция неправильно работает с кириллицей. Используйте функцию mb_strtolower (она работает аналогичным образом, но корректно обрабатывает кириллицу? НЕТ, ТОЖЕ НЕКОРРЕКТНО!).
Синтаксис: strtolower(строка).
Пример
В данном примере функция преобразовала строку в нижний регистр:
<?echo strtolower('ABC')?>
abc.
Пример
В данном примере функция преобразовала строку в нижний регистр:
<?echo mb_strtolower('НИЧЕГО СЕБЕ')?>
?????? ????.
НЕТ, ТОЖЕ НЕКОРРЕКТНО!
Это в UTF-8:
Это в cp1251:
Функция strtoupper
Функция strtoupper преобразовывает строку в верхний регистр.
Данная функция неправильно работает с кириллицей. Используйте функцию mb_strtoupper (она работает аналогичным образом, но корректно обрабатывает кириллицу).
Синтаксис: strtoupper(строка).
Пример
В данном примере функция преобразовала строку в верхний регистр:
<?echo strtoupper('abc')?>
ABC.
Функция ucfirst
Функция ucfirst преобразует 1-й символ строки в верхний регистр. Не работает с кириллицей.
Синтаксис: ucfirst(строка).
Пример
Переведем 1-й символ строки в верхний регистр:
<?echo ucfirst('hello')?>
Hello.
<?echo ucfirst('привет')?>
привет (не работает с кириллицей).
Функция lcfirst
Функция lcfirst (буква L маленькая англ. впереди от слова lower - вниз) преобразует 1-й символ строки в нижний регистр. Не работает с кириллицей.
Синтаксис: lcfirst(строка).
Пример
Переведем 1-й символ строки в нижний регистр:
<?echo lcfirst('Hello')?>
hello.
<?echo lcfirst('Привет')?>
Привет (не работает с кириллицей).
Функция ucwords
Функция ucwords преобразует 1-й символ каждого слова в строке в верхний регистр. Не работает с кириллицей.
Синтаксис: ucwords(строка).
Пример
1-й символ каждого слова в строке преобразуется в верхний регистр:
<?echo ucwords('hello world')?>
Hello World.
<?echo ucwords('привет мир')?>
привет мир (не работает с кириллицей).
Функция strlen
Функция strlen возвращает длину строки (количество символов в строке).
Данная функция неправильно работает с кириллицей(?). Используйте функцию mb_strlen (она работает аналогичным образом, но корректно обрабатывает кириллицу. Проверено на php5: все работает корректно и одинаково и с функцией strlen, и с функцией mb_strlen).
Синтаксис: strlen(строка).
Пример
Функция вернет длину строки 'hello':
<?echo strlen('hello')?>
5.
<?echo strlen('привет')?>
6 (работает).
<?echo strlen('Попробуем подлиннее предложение на кириллице и england + 4856')?>
61 (работает).
<?echo mb_strlen('Попробуем функцию 2 mb_strlen на кириллице')?>
22 (работает).
Функция substr
Функция substr вырезает и возвращает подстроку из строки.
Сама строка при этом не изменяется. Нумерация символов строки начинается с 0.
2-й параметр может быть отрицательным, в этом случае отсчет начнется с конца строки, при этом последний символ будет иметь номер -1.
Последний параметр можно не указывать, в этом случае отрезание произойдет до конца строки.
Данная функция неправильно работает с кириллицей(?). Используйте функцию mb_substr (она работает аналогичным образом, но корректно обрабатывает кириллицу). Проверено на php5: все работает корректно и одинаково и с функцией strlen, и с функцией mb_substr).
Синтаксис: substr(строка,откуда,[сколько]).
Пример
Вырезать 3 символа из строки позиции 1 (со 2-го символа, так как 1-й имеет номер 0):
<?echo substr('abcdef',1,3)?>
bcd.
<?echo substr('природа',1,3)?>
рир.
<?echo mb_substr('природа',1,3)?>
рода.
Пример
Вырезать все символы до конца строки, начиная со 2-го (он имеет номер 1):
<?echo substr('abcdef',1)?>
bcdef.
<?echo substr('природа',1)?>
рирода.
<?echo mb_substr('природа',1)?>
рода.
Пример
Вырезать 3-й и 2-й символы с конца, для этого укажем начало вырезания -3 (это номер 3-го символа с конца), а количество символов 2:
<?echo substr('abcdef',-3,2)?>
de.
<?echo substr('природа',-3,2)?>
од.
<?echo mb_substr('природа',-3,2)?>
природа.
Пример
Вырезать 2 последних символа, для этого укажем позицию предпоследнего символа (это -2), а 3-й параметр не укажем, в этом случае обрезание будет до конца строки:
<?echo substr('abcdef',-2)?>
ef.
<?echo substr('природа',-2)?>
да.
<?echo mb_substr('природа',-2)?>
природа.
Пример
Вырезать последний символ:
<?echo substr('abcdef',-1)?>
f.
<?echo substr('природа',-1)?>
а.
<?echo mb_substr('природа',-1)?>
рода.
Функция str_replace
Функция str_replace ищет в строке заданный текст и меняет его на другой.
1-м параметром функции принимает что меняем, а 2-м - на что меняем. Это могут быть 2 строки или 2 массива.
Во 2-м случае соответствующие элементы 1-го массива заменятся на соответствующие элементы 2-го массива.
Есть также функция str_ireplace, которая делает тоже самое, но без учета регистра.
Синтаксис: str_replace(что меняем,на что меняем,где меняем).
Пример
Функция заменит все найденные буквы 'a' на '!':
<?echo str_replace('a','!','abcabc')?>
!bc!bc.
Пример
Функция заменит 'a' на 1, 'b' на 2, 'c' на 3:
<?echo str_replace(['a','b','c'],[1,2,3],'abcabc')?>
123123.
Функция strtr
Функция strtr осуществляет поиск и замену символов в строке.
Синтаксис. Функция имеет 2 варианта работы.
В 1-м варианте функция принимает массив замен: ключами служит то, что мы меняем, а значениями - на что будем менять: strtr(где меняем,массив замен).
Во 2-м варианте функция 1 параметром принимает строку с символами, которые будут заменены, а другим параметром строку с символами, на которые будет производится замена. Соответствующие символы 1-й строки будут заменены на соответствующие символы 2-й строки: strtr(где меняем,что меняем,на что меняем).
Пример
Функция заменит символы 1 и 2 на 'a' и 'b' соответственно:
<?echo strtr('жжж111222',['ж'=>'ю','1'=>'a','2'=>'b'])?>
юююaaabbb.
Пример
Функция также заменит символы 1 и 2 на 'a' и 'b' соответственно:
<?echo strtr('ююю111222333','ю123','жabc')?>
жжжaaabbbccc.
Функция substr_replace
Функция substr_replace заменяет указанную часть строки на другую.
Эта функция вырезает указанную часть строки (параметрами указывается откуда начинать вырезание и сколько символов взять) и заменяет вырезанную часть на указанную строку.
Синтаксис: substr_replace(где меняем,на что меняем,с какого символа,[сколько символов]).
Если последний параметр не указан, замена произведется до конца строки.
Пример
Вырезать из строки символы (3 штуки) и вместо них вставить '!!!', начиная с 1-го (нумерация символов начинается с 0):
<?echo substr_replace('abcde','!!!',1,3)?>
a!!!e.
Пример
Начиная с 1-го (нумерация символов начинается с 0) до конца строки (так как последний параметр не указан) вырезать из строки символы и вместо них вставить '!!!':
<?echo substr_replace('abcde','!!!',1)?>
a!!!.
Функция strpos
Функция strpos возвращает позицию 1-го вхождения подстроки в другую строку. 1-м параметром функция принимает строку, в которой осуществляется поиск, 2-м параметром - подстроку, которую следует искать.
Результатом выполнения функции будет позиция 1-го символа найденной подстроки, а если такая подстрока не будет найдена - то false. Учтите, что нумерация идет с нуля и, если подстрока находится в начале строки, то результатом функции будет 0. Это может привести к ошибкам, если сделать, к примеру, так: if(strpos()) - в этом случае и 0, и false приведут к одинаковому результату, чего бы нам не хотелось.
По-умолчанию функция ищет с начала строки до 1-го совпадения. Начало поиска можно регулировать 3-м необязательным параметром (если он задан, то поиск начнется не с начала строки, а с указанного места).
Есть также функция stripos, которая делает тоже самое, но без учета регистра.
Синтаксис: strpos(где ищем,что ищем,[откуда искать]).
Пример
Функция вернет позицию 1-го символа 'с'. Он занимает позицию 2, так как отсчет начинается с 0:
<?echo strpos('abc abc','c')?>
2.
Пример
В данном примере задан 3-й параметр и поэтому поиск начнется с 3-ей позиции, в этом случае функция найдет уже 2-й символ 'c' и выведет его позицию 6:
<?echo strpos('abc abc','c',3)?>
6.
Пример
Проверим, что строка начинается на 'http:' (обратите внимание на сравнение по ===, а не по ==):
<?if(strpos('http://d.ru','http:')===0){echo'да';}else{echo'нет';}?>
да.
<?if(strpos('https://d.ru','http:')===0){echo'да';}else{echo'нет';}?>
нет.
Функция strrpos
Функция strrpos возвращает позицию последнего вхождения подстроки.
Результатом выполнения функции будет позиция 1-го символа найденной подстроки, а если такая подстрока не будет найдена, то false (нумерация идет с 0 и, если подстрока находится в начале строки, то результатом функции будет 0). Это может привести к ошибкам, если сделать, к примеру, так: if(strpos()), в этом случае и 0, и false приведут к одинаковому результату, чего бы нам не хотелось.
По умолчанию функция ищет с начала строки до 1-го совпадения. Начало поиска можно регулировать 3-м необязательным параметром. Если он задан, то поиск начнется не с начала строки, а с указанного места.
Есть также функция strripos, которая делает тоже самое, но без учета регистра.
Синтаксис: strrpos(где ищем,что ищем,[откуда искать]).
Пример
В данном примере функция вернет позицию последнего вхождения символа 'а':
<?echo strrpos('abc abc','a')?>
4.
<?echo strrpos('abc abc','e')?>
.
Функция strstr
Функция strstr находит 1-е вхождение подстроки в строку и возвращает часть строки начиная этого места до конца строки. В отличие от strchr ищет вхождение подстроки из нескольких символов, а не вхождение 1 символа.
Есть также функция stristr, которая делает тоже самое, но без учета регистра.
Синтаксис: strstr(где ищем,что ищем).
Пример
В данном примере функция достанет адрес страницы без доменного имени из url (вернет подстроку, начиная с 1-го /, до конца строки)
<?echo strstr('d.ru/folder1/folder2/page.html','/')?>
/folder1/folder2/page.html.
Функция explode
Функция explode разбивает строку в массив по определенному разделителю.
Синтаксис: explode(разделитель,строка).
Пример
Разбить части даты в массив (разделитель - дефис):
<?$d='2025-12-31';$a=explode('-',$d);print_r($a)?>
Array ( [0] => 2025 [1] => 12 [2] => 31 ) .
Пример
Пусть дана дата в формате '2025-12-31'. Сделать из нее дату в формате '31.12.2025'. Для этого разобьем ее в массив через explode и сформируем новую строку в нужном нам формате:
<?$d='2025-12-31';$a=explode('-',$d);echo$a[2].'.'.$a[1].'.'.$a[0]?>
31.12.2025.
Функция implode
Функция implode сливает массив в строку с указанным разделителем.
Синтаксис: implode(разделитель,строка).
Пример
Слить массив ['a','b','c'] в строку 'a-b-c':
<?$a=['a','b','c'];$s=implode('-',$a);echo$s?>
a-b-c.
Функция str_split
Функция str_split разбивает строку в массив.
1-м параметром она принимает строку, а 2-м - количество символов в элементе массива.
К примеру, если 2-й параметр задать как 3 - функция разобьет строку в массив так, чтобы в каждом элементе массива было по 3 символа.
Синтаксис: str_split(строка,количество символов в элементе массива).
Пример
Разбить строку по 2 символа в элементе массива (обратите внимание на то, что последнему элементу не хватило символов и там их не 2, а 1):
<?$s='abcde';$a=str_split($s,2);print_r($a)?>
Array ( [0] => ab [1] => cd [2] => e ) .
Пример
Разбить строку по 3 символа в элементе массива:
<?$s='abcdefg';$a=str_split($s,3);print_r($a)?>
Array ( [0] => abc [1] => def [2] => g ) .
Пример
Найти сумму цифр числа. Для этого разобьем число в массив с помощью str_split и сложим элементы этого массива с помощью array_sum:
<?$n=12345;echo array_sum(str_split($n,1))?>
15.
Функция trim
Функция trim удаляет пробелы с начала и конца строки. Может также удалять другие символы, если их указать 2-м параметром.
Есть также функции ltrim и rtrim, которые делают то же самое, но ltrim только для левого края строки, а rtrim - для правого.
Синтаксис: trim(строка); trim(строка,символы).
Пример
Удалить пробелы по краям строки:
<?print_r(trim(' hello '))?>
hello.
Пример
Удалить слеши по краям строки:
<?echo trim('/hello/','/')?>
hello.
Пример
Удалить слеши и точки по краям строки:
<?echo trim('/hello.','/.')?>
hello.
Пример
Функция удаляет любое количество указанных символов, если они стоят с краю:
<?echo trim('../../hello...','/.')?>
hello.
Пример
Указать диапазон символов с помощью 2 точек '..'. К примеру, укажем, что мы хотим удалить символы от 'a' до 'i':
<?echo trim('hello.','a..i')?>
llo..
Функция ltrim
Функция ltrim удаляет пробелы с начала строки. Подробнее см. функцию trim.
Функция rtrim
Функция rtrim удаляет пробелы с конца строки. Подробнее см. функцию trim.
Функция strrev
Функция strrev переворачивает строку так, чтобы символы шли в обратном порядке.
Синтаксис: strrev(строка).
Пример
Функция перевернет строку '12345':
<?echo strrev('12345')?>
54321.
Функция str_shuffle
Функция str_shuffle переставляет символы в строке в случайном порядке.
См. также функцию shuffle, которая переставляет элементы массива в случайном порядке.
Синтаксис: str_shuffle(cтрока).
Пример
При каждом новом обновлении страницы строка будет иметь другой порядок символов:
<?echo str_shuffle('Hello world!')?>
lH!oorlwedl.
Функция number_format
Функция number_format позволяет форматировать число.
В основном используется для того, чтобы отделять тройки чисел пробелами, к примеру, из 1234567 она может сделать 1 234 567.
По умолчанию функция разделяет тройки запятыми: из 1234567 делает 1,234,567.
Кроме того, она позволяет регулировать количество знаков после дробной части. Это количество задается 2-м необязательным параметром.
Например, можно из дроби 12345.6789 сделать дробь 12 345.68. Функция расставит пробелы между тройками и округлит дробь до 2 знаков в дробной части.
3-й необязательный параметр задает разделитель дробной части (по умолчанию точка, но можно сменить). Обязательно вместе с 3-м параметром должен быть и 4-й - он устанавливает разделитель троек чисел (по умолчанию запятая, но можно сменить, к примеру, на пробел).
Синтаксис: Функция принимает 1, 2 или 4 параметра (не 3).
number_format(число);
number_format(число, количество знаков дробной части);
number_format(число, количество знаков дробной части, разделитель дробной части, разделитель тысяч).
Пример
В данном примере тройки чисел отделяются запятой:
<?echo number_format(1234567)?>
1,234,567.
Пример
В данном примере тройки чисел отделяются запятой, а дробная часть округляется до 2 знаков:
<?echo number_format(1234.567,2)?>
1,234.57.
Пример
В данном примере тройки чисел отделяются пробелом, дробная часть округляется до 2 знаков, разделителем дробной части служит слеш /:
<?echo number_format(1234.567,2,'/',' ')?>
1 234/57.
Пример
В данном примере тройки чисел отделяются пробелом, дробная часть округляется до 2 знаков, разделителем дробной части служит точка:
<?echo number_format(1234.567,2,'.',' ')?>
1 234.57.
Функция str_repeat
Функция str_repeat повторяет строку заданное количество раз.
См. также функцию str_pad, которая дополняет строку до заданного размера другой строкой.
Синтаксис: str_repeat(строка,сколько раз повторить).
Пример
В данном примере функция повторила строку 'x' 5 раз:
<?echo str_repeat('x',5)?>
xxxxx.
Функция htmlspecialchars
Функция htmlspecialchars позволяет вывести теги в браузер так, чтобы он не считал их командами, а выводил как строки.
Функция преобразует амперсанд '&' в '& a m p ;', '<' в '& l t ;', '>' в '& g t ;'.
См. также функцию strip_tags, которая удаляет теги из строки.
См. также функцию htmlspecialchars_decode, которая выполняет преобразование, обратное функции htmlspecialchars.
Синтаксис: htmlspecialchars(строка).
Пример
Теги выведутся на экран, а не преобразуются в команды браузера:
<?echo htmlspecialchars('<b>жирный текст</b>')?>
.
Функция strip_tags
Функция strip_tags удаляет HTML-теги из строки (не трогая их содержимого). 2-м необязательным параметром можно указать разрешенные теги, они не будут удалены. Их указываем в таком формате: '<b>' или '<b><p>', если хотим оставить несколько тегов.
Синтаксис: strip_tags(строка,[разрешенные теги]).
Пример
Функция удалит HTML-теги из строки:
<?echo strip_tags('hello <b>world</b>')?>
hello world.
Функция chr
Функция chr находит символ по его ASCII коду.
Синтаксис: chr(код символа).
Пример
Выводится символ, который имеет код 97:
<?echo chr(97)?>
a.
Пример
Давайте выведем случайную маленькую букву латинского алфавита. Для этого посмотрим на таблицу ASCII и увидим, что маленькие латинские буквы имеют коды от 97 до 122. Поэтому сгенерируем случайное число в этом диапазоне с помощью mt_rand и результат возьмем в chr:
<?echo chr(mt_rand(97,122))?>
o.
Пример
Сформировать случайную строку из 6 маленьких латинских букв. Для этого описанную в предыдущем примере операцию повторим 6 раз в цикле:
<?$s='';for($i=1;$i<=6;$i++){$s.=chr(mt_rand(97,122));}echo$s?>
dgwyne.
Пример
Большие латинские буквы имеют диапазон 65-90, а маленькие - 97-122. Т.е. между ними есть дыра. Давайте получим случайный символ маленькую или большую латинскую букву. Для этого с помощью range сформируем 2 массива: 1-й с числами от 65 до 90, а 2-й с числами от 97 до 122. Объединим их вместе с помощью array_merge и затем выведем случайный элемент этого массива с помощью array_rand:
<?$q=array_merge(range(65,90),range(97,122));echo chr($q[array_rand($q)])?>
i.
Функция ord
Функция ord возвращает ASCII код символа. Параметром принимает 1 символ или целую строку (в этом случае возвращает код ее 1-го символа).
Синтаксис: ord(символ или строка).
Пример
Давайте узнаем код символа 'W':
<?echo ord('W')?>
87.
Пример
Выведем код 1-го символа строки 'World':
<?echo ord('World')?>
87.
Функция str_word_count
Функция str_word_count подсчитывает количество слов в строке.
Функция может принимать 2-й необязательный параметр, число 1 или 2.
Если он не задан, то возвращается целое число, равное количеству слов.
Если передано 1, то возвращается массив, содержащий все слова, входящие в строку.
Если передано 2, то возвращается массив, ключами которого являются позиции в строке, а значениями - соответствующие слова.
Синтаксис: str_word_count(строка,[число]).
Пример
Считать количество слов в строке:
<?echo str_word_count('Hello my world')?>
3.
Функция substr_count
Функция substr_count подсчитывает сколько раз встречается подстрока в строке.
Синтаксис: substr_count(строка,подстрока).
Пример
Считать, сколько раз в нашей строке встречается подстрока 'test':
<?echo substr_count('test www test','test')?>
2.
Функция count_chars
Функция count_chars подсчитывает сколько раз встречаются различные символы в строке.
1-м параметром функция принимает строку, а 2-м необязательным параметром - модификатор, который изменяет работу функции:
0 - массив, индексами которого являются ASCII коды, а значениями - число вхождений соответствующего символа.
1 - то же, что и для 0, но информация о символах с нулевым числом вхождений не включается в массив.
2 - то же, что и для 0, но в массив включается информация только о символах с нулевым числом вхождений.
3 - строка, состоящая из символов, которые входят в исходную строку хотя бы раз.
4 - строка, состоящая из символов, которые не входят в исходную строку.
По умолчанию функция ведет себя так, будто 2-й параметр поставлен в 0.
Синтаксис: count_chars(строка,[модификатор]).
ПРОВЕРИТЬ!!!
<?echo count_chars('testwwwtest',2)?>
Array.
Функция strchr
Функция strchr находит 1-е вхождение подстроки в строку и возвращает часть строки начиная этого места до конца строки.
Синтаксис: strchr(где ищем,что ищем).
Если 2-й параметр состоит более чем из 1 символа, используется только 1-й символ.
Пример
Функция достанет адрес страницы без доменного имени из url (вернет подстроку, начиная с 1-го /, до конца строки).
<?echo strchr('d.ru/folder1/folder2/page.html','/')?>
/folder1/folder2/page.html.
Функция strrchr
Функция strrchr находит последнее вхождение символа в строку и возвращает часть строки начиная этого места до конца строки.
Синтаксис: strrchr(где ищем,что ищем).
Если 2-й параметр состоит более чем из 1 символа, используется только 1-й символ.
Пример
Функция достанет адрес страницы из url (вернет подстроку, начиная с последнего /, до конца строки).
<?echo strrchr('d.ru/folder1/folder2/page.html','/')?>
/page.html.