Язык программирования PHP

         

Функция 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]=>Доброе утро, дорогая!) */ ?>

Пример 8.7. Использование функции str_replace() (html, txt)

Если искомое значение и значение для замены – массивы, то берется по одному значению из каждого массива и производится их поиск и замена в объекте. Если значений для замены меньше, чем значений для поиска, то в качестве новых значений используется пустая строка.

<?php $greeting = array("Привет", "Привет всем!", "Привет, дорогая!","Здравствуйте", "Здравствуйте, товарищи", "Hi"); // объект $search = array ("Привет", "Здравствуйте", "Hi"); // значения, которые будем заменять $replace = array ("Доброе утро", "День добрый"); // значения, которыми будем заменять $new_greet = str_replace($search, $replace, $greeting); // делаем замену print_r($new_greet); //выводим полученный массив ?>


Пример 8.8. Использование функции str_replace(). Вариант 2 (html, txt)

В результате получим такой массив:

Array ( [0] => Доброе утро [1] => Доброе утро всем! [2] => Доброе утро, дорогая! [3] => День добрый [4] => День добрый, товарищи [5] => )

Если значения для поиска – массив, а значение для замены – строка, то эта строка будет использована для замены всех найденных значений.

<?php $greeting = array("Привет", "Привет всем!", "Привет, дорогая!", "Здравствуйте", "Здравствуйте, товарищи"); // объект $search = array ("Привет","Здравствуйте"); // значения, которые будем заменять $replace = "День добрый"; // значение, которым будем заменять $new_greet = str_replace($search, $replace, $greeting); // делаем замену print_r($new_greet); //выводим полученный массив ?>

Пример 8.9. Использование функции str_replace(). Вариант 3 (html, txt)

Получим:

Array ( [0] => День добрый [1] => День добрый всем! [2] => День добрый, дорогая! [3] => День добрый [4] => День добрый, товарищи )

Функция str_replace() чувствительна к регистру, но существует ее регистронезависимый аналог – функция str_ireplace(). Однако эта функция поддерживается не во всех версиях PHP.



Однако просто поля для ввода шаблона недостаточно. Один человек введет в него одно, другой – другое. Нужно договориться о том, как создавать шаблоны, что можно в них использовать, т.е. нужно придумать язык шаблонов. Например, мы договариваемся, что при создании шаблона можно задействовать любые html-теги, а набор спецсимволов вида <!имя_элемента> определяет значение элемента с именем имя_элемента. Далее, как обрабатывать такого рода шаблоны? Можно использовать функцию str_replace():

<?php $tmpl = $_GET["shablon"]; /* шаблон, введенный пользователем. Например, это может быть такая строка: "<h1><!title></h1> <p><font size=-1><!description></font></p><p ><!author><br><!published></p>" */ function Show(){ // функция, которая производит замену // элемента шаблона на его значение global $tmpl; foreach($_GET as $k => $v) { $tmpl = str_replace("<!$k>",$v,$tmpl); } echo $tmpl; } Show(); ?>

Как эти файлы выглядят для обычного пользователя? Если мы введем в форму такие данные как показано на рисунке 8.1, то в результате получим:

Первая машина для переписи населения Идея наносить данные на перфокарты и затем считывать и обрабатывать их автоматически принадлежала Джону Биллингсу, а ее техническое решение осуществил Герман Холлерит. Перфокарта Холлерита оказалась настолько удачной, что без малейших изменений просуществовала до наших дней. А. М. Федотов 12.02.03

Рис. 8.1.  Форма для ввода описания документа «статья» и шаблона для его отображения


Содержание раздела