echo $text{1}; // выведет символ "р"
Заметим, что номером этого символа является число один, а не два, так как нумерация символов строки производится начиная с нуля.
Раз уж мы начали говорить о символах в строке и их нумерации, то невольно возникает вопрос, сколько всего символов в строке и как это вычислить. Число символов в строке – это длина строки. Вычислить длину строки можно с помощью функции strlen (строка). Например, длина строки «Разработка информационной модели» вычисляется с помощью команды: strlen("Разработка информационной модели"); и равна 32 символам.
Итак, как выделять и находить подстроки, мы рассмотрели. Теперь научимся заменять строку, входящую в состав исходной строки, на другую строку по нашему выбору.
Замена вхождения подстроки
Функция str_replace
Для замены вхождения подстроки можно использовать функцию str_replace(). Это простая и удобная функция, позволяющая решать множество задач, не требующих особых тонкостей при выборе заменяемой подстроки. Для того чтобы производить замены с более сложными условиями, используют механизм регулярных выражений и соответствующие функции ereg_replace() и preg_replace(). Синтаксис функции str_replace() такой:
str_replace(искомое значение,
значение для замены, объект)
Функция str_replace() ищет в рассматриваемом объекте значение и заменяет его значением, предназначенным для замены. Почему мы говорим здесь не про строки для поиска и замены и исходную строку, а про значения и объект, в котором происходит замена? Дело в том, что начиная с PHP 4.0.5 любой аргумент этой функции может быть массивом.
Если объект, в котором производится поиск и замена, является массивом, то эти действия выполняются для каждого элемента массива и в результате возвращается новый массив.
<?php
$greeting = array("Привет", "Привет всем!",
"Привет, дорогая!"); // объект
$new_greet = str_replace("Привет",
"Доброе утро", $greeting);
// делаем замену
print_r($new_greet);
/* получим: Array ([0]=>Доброе утро
[1]=>Доброе утро всем!
[2]=>Доброе утро, дорогая!) */
?>
Если искомое значение и значение для замены – массивы, то берется по одному значению из каждого массива и производится их поиск и замена в объекте. Если значений для замены меньше, чем значений для поиска, то в качестве новых значений используется пустая строка.
<?php
$greeting = array("Привет", "Привет всем!",
"Привет, дорогая!","Здравствуйте",
"Здравствуйте, товарищи", "Hi");
// объект
$search = array ("Привет",
"Здравствуйте", "Hi");
// значения, которые будем заменять
$replace = array ("Доброе утро",
"День добрый");
// значения, которыми будем заменять
$new_greet = str_replace($search, $replace,
$greeting);
// делаем замену
print_r($new_greet);
//выводим полученный массив
?>
В результате получим такой массив:
Array (
[0] => Доброе утро
[1] => Доброе утро всем!
[2] => Доброе утро, дорогая!
[3] => День добрый
[4] => День добрый, товарищи
[5] =>
)
Если значения для поиска – массив, а значение для замены – строка, то эта строка будет использована для замены всех найденных значений.
<?php
$greeting = array("Привет", "Привет всем!",
"Привет, дорогая!", "Здравствуйте",
"Здравствуйте, товарищи");
// объект
$search = array ("Привет","Здравствуйте");
// значения, которые будем заменять
$replace = "День добрый";
// значение, которым будем заменять
$new_greet = str_replace($search,
$replace, $greeting); // делаем замену
print_r($new_greet);
//выводим полученный массив
?>
Получим:
Array (
[0] => День добрый
[1] => День добрый всем!
[2] => День добрый, дорогая!
[3] => День добрый
[4] => День добрый, товарищи
)
Функция str_replace() чувствительна к регистру, но существует ее регистронезависимый аналог – функция str_ireplace(). Однако эта функция поддерживается не во всех версиях PHP.
Еще один пример использования функции str_replace() – обработка шаблонов.
Обратимся в очередной раз к описанию какого-либо документа, например статьи. Много раз мы уже создавали форму для ввода подобного описания и даже отображали данные, введенные пользователем в такого рода форму. Но как отображать эти данные, мы описывали непосредственно в коде нашей программы. Теперь мы хотим, чтобы способ отображения данных задавал сам пользователь. Для этого добавим в нашу форму еще один элемент для ввода шаблона.
<h2>Введите описание статьи</h2>
<form action=sbl.php>
<table border=0>
<tr><td>Название </td><td><input
type=text name=title > </td></tr>
<tr><td>Краткое содержание </td><td><input
type=text name=description > </td></tr>
<tr><td>Автор </td><td><input
type=text name=author > </td></tr>
<tr><td>Дата публикации </td><td><input
type=text name=published ></td></tr>
<tr><td>Шаблон документа </td><td><textarea
name=shablon ></textarea></td></tr>
</table>
<input type=submit value="Отправить">
</form>
Однако просто поля для ввода шаблона недостаточно. Один человек введет в него одно, другой – другое. Нужно договориться о том, как создавать шаблоны, что можно в них использовать, т.е. нужно придумать язык шаблонов. Например, мы договариваемся, что при создании шаблона можно задействовать любые html-теги, а набор спецсимволов вида <!имя_элемента> определяет значение элемента с именем имя_элемента. Далее, как обрабатывать такого рода шаблоны? Можно использовать функцию str_replace():
<?php
$tmpl = $_GET["shablon"];
/* шаблон, введенный пользователем.
Например, это может быть такая строка:
"<h1><!title></h1> <p><font
size=-1><!description></font></p><p