Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Функция 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); //выводим полученный массив?> Получим: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 align=right><!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. Форма для ввода описания документа «статья» и шаблона для его отображения




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 320; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.