Строковые функции в PHP
Строки - это один из основных типов переменных в PHP. И с ними приходится работать наравне с числами, с булевскими переменными и массивами. Разумеется, разработчики PHP, чтобы облегчить нам работу со строками, уже встроили много готовых функций для нас. И о самых часто используемых мы и поговорим.
Начнём с функции, которую я использую при работе со строками в PHP регулярно - strlen(). Данная функция возвращает длину строки (количество символов в строке):
<?php
$str = "This is my string";
echo strlen($str);
?>
Думаю, что данная функция в комментариях не нуждается.
Также имеются две часто используемые строковые функции - это strtolower() и strtoupper(). Эти функции позволяют перевести строку в нижний и верхний регистр соответственно:
<?php
$str = "This is my string";
echo strtolower($str)."<br />";
echo strtoupper($str);
?>
Очень полезная строковая функция - substr(), которая возвращает подстроку из исходной строки:
<?php
$str = "This is my string";
echo substr($str, 1)."<br />";
echo substr($str, 4, 2)."<br />";
?>
Как видите, данная функция может содержать два, либо три параметра. Первый параметр - это исходная строка, второй параметр - это номер символа в исходной строке, который потом станет первым в полученной строке. Обратите внимание: нумерация символов начинается с 0 (то есть в нашем примере, 1-ый символ - "h"). Третий параметр означает длину строки, которую мы хотим получить. Если этот параметр не задан, то возвращается строка, начиная со второго параметра и до конца строки. В общем, смотрите на результат, и Вам всё станет ясно.
Ещё одна полезная строковая функция в PHP - это str_replace(). Как следует из названия, данная функция возвращает строку с заменой какой-то части:
<?php
$str = "This is my string";
echo str_replace("my", "your", $str);
?>
На выходе у нас получилась следующая строка: "This is your string". То есть данная функция заменила строку, заданную первым параметром, на строку, заданную вторым параметром, в строке, заданной третьим параметром, и вернула результат.
И последняя функция, которую мы с Вами рассмотрим, - это strpos(). Данная функция ищет вхождение подстроки в строку и возвращает номер первого символа вхождения (напоминаю, что нумерация символов начинается с 0, а не с 1):
<?php
$str = "This is my string";
echo strpos($str, "is");
?>
Как видите, данная функция очень простая и очень важная, так как позволяет осуществлять поиск в строке. Также у функции strpos() есть ещё один необязательный параметр, задающий смещение. Напоминаю, что данная функция ищет первое вхождение. Например, в нашем примере "is" встречается в строке дважды, но вернула эта функция номер символа при первом вхождении. Поэтому для того, чтобы получить номера и других вхождений необходимо задавать третий параметр - смещение:
<?php
$str = "This is my string";
echo strpos($str, "is", 4);
?>
Таким образом, теперь мы получили номер символа в следующем вхождении. И, напоследок, хочется сказать, что если вхождение не будет найдено, то функция вернёт false. И вот на этом моменте у многих бывают ошибки. Давайте приведу простой пример:
<?php
$str = "This is my string";
if (strpos($str, "Th") == false) echo "Строка не найдена";
else echo "Строка найдена";
?>
Очевидно, что "Th" содержится в исходной строке, и номер символа первого вхождения - это 0. Но если Вы запустите этот скрипт, то увидите, что "строка не найдена". Почему? Если Вы читали статью об операторе эквивалентности, то без проблем ответите на этот вопрос. Однако, если нет, то поясняю. Дело в том, что так как у нас функция strpos() вернула 0, а 0 с точки зрения PHP - это false, то он без проблем сделал вывод о том, что условие истинно (ведь слева false и справа false). Как быть? Ответ прост: воспользоваться оператором эквивалентности (обозначается ===), который сравнивает не только значения (которые в нашем примере равны для PHP), но и их типы:
<?php
$str = "This is my string";
if (strpos($str, "Th") === false) echo "Строка не найдена";
else echo "Строка найдена";
?>
И вот теперь Вы увидите, что "строка найдена". Как видите, оператор эквивалентности может заявить о себе в любую минуту, и всегда нужно о нём помнить, иначе Вам не избежать труднодоступных ошибок.
Конечно, это далеко не весь набор строковых функций, которые нам предоставили разработчики PHP, но я, исходя из своей практики, привёл Вам список самых часто используемых строковых функций в PHP.
-
- Михаил Русаков
Комментарии (17):
Здравствуйте, Михаил. Подскажите пожалуйста по поводу последнего примера, почему не работает такой пример: $str = "This is my string"; if (strpos($str, "Th") === true) echo "Строка найдена"; else echo "Строка не найдена";
Ответить
Потому что strpos возвращает число, а если ничего не найдено, то false.
Ответить
Не поняла пример со смещением. Как его задать и при чем здесь 4?
Ответить
Смещение на x "переносит" начало строки для функции (но не в реальности), поиск будет начинаться не с 0-го, а с х-го символа
Ответить
Здравствуйте, Михаил! Функция echo "chr($i)" при $i = от 128 до 255 выводит вопросики�. Кодировка всех файлов UTF-8. Запускаю через денвер. В вашем же уроке аналогичная программа выводит русские буквы. Что можно сделать, чтобы вывести русские буквы? Спасибо!
Ответить
Нашел одно объяснение: я использую файл .htaccess в корне, а в нем строка AddDefaultCharset utf-8. Если удалить файл, то chr() выводит русские символы, но вся остальная кириллица на странице превращается в кракозябры. Но, как сделать так, чтобы работало и то и другое???
Ответить
Похоже, нашел решение - chr() выдает результат в своей кодировке. Необходимо просто перевести в UTF. Функция такая iconv('windows-1251','utf-8',chr($i)). Михаил, может стоит добавить в уроки PHP хотя бы пару слов про кодировку строк.
Ответить
Уважаемый Александр,по возможности,добавит P.s. что у вас за интересная ава?) зачем оба флага и оба герба?)
Ответить
Михаил привет. $menu = $this->menu2->getAll(); Хочу чтоб цифра 2 менялась в зависимости от входного параметра. $menu = $this->menu.$sr_duble->getAll(); Но подобная конструкция не работает. Можно здесь что то придумать?
Ответить
Что означает такая конструкция? Метод на константу?
Ответить
Здравствуйте Михаил, разве функция strlen() возвращает кол.символов в строке, в справочнике по php написано что то байтовая функция и возвращает она количество байтов в строке, то есть она считает пробелы за символ.
Ответить
в PHP strlen() возвращает длину строки
Ответить
Функция strlen() возвратит количество байт, а не число символов в строке. P.s.В справочнике написано!
Ответить
вау-вау,в каком таком интересном справочнике это написано?если не секрет,конечно и это не заговор инопланетян. Можно ссылочку?) Быть может,Вы не верно уловили суть. Да,данная функция учитывает и пробелы как символ. Но опять же,она считает длину конкретной,заданной строки.Т.е.количество символов в этой строке. И да,пробел - это литера,не имеющая очертаний,т.е. невидимая А возвращает оно именно количество символов в строке. Можете проверить)
Ответить
Вот http://www.php.net/strlen
Ответить
ну,тут зависимость идёт В зависимости от кодировки. Но называют именно функцией для расчёта длинны строки. Просто не всегда размер символа соответствует одному байту. И если взять другую кодировку,то да. Но это не ошибка. Хотя подмечено верно Суть не меняется от этого замечания. Да и в любом случае у Михаила просто не написано уточнение о том,что только в случае,если символы весят не более байта
Ответить
Доброго времени! Мне нужна строковая функция чтобы в строке: 1. пробел(ов) заменить одним знаком "-" 2. изменить регистр в нижний, 3. удалить все знаки кроме букв и цифр. 4. и заменить все буквы на английский Если можете помогите кто нибудь пожалуйста.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.