Вероятно, читатели примерно представляют, что такое тип данных "
<?php
echo 'В такой строке НЕ обрабатываются
переменные и большинство
последовательностей';
echo "Здесь переменные и последовательности
обрабатываются";
echo <<<EOT
Здесь тоже обрабатываются как переменные,
так и управляющие последовательности.
И кроме того, можно вводить символы кавычек
без их экранирования обратным слэшем.
EOT;
?>
Уже не раз, начиная с самой первой лекции, мы использовали функцию . На самом деле, – не функция, а языковая конструкция, поэтому использовать при ее вызове круглые скобки не обязательно. позволяет выводить на экран может быть сколько угодно. Их разделяют запятыми или объединяют с помощью оператора конкатенации и никогда не заключают в круглые скобки.
<?
echo "Пришел ", "увидел ", "победил ";
// выведет строку "Пришел увидел победил"
// многие предпочитают передавать несколько
// параметров в echo с помощью конкатенации
echo "Пришел " . "увидел " . "победил ";
// тоже выведет строку
// "Пришел увидел победил"
echo ("Пришел ", "увидел ", "победил ");
// выдаст ошибку: unexpected ','
?>
Существует сокращенный синтаксис для команды :
<?=строка_для_вывода?>
Здесь параметр строка_для_вывода содержит
Например, такой скрипт выведет на экран красным цветом "Меня зовут Вася":
<? $name="Вася" ?> <font color=red>Меня зовут <?=$name?></font>
Кроме языковой конструкции существует ряд функций для вывода и ее разновидности printf, sprintf и т.п.
Функция позволяет выводить на экран только одну , не может быть вызвана с помощью переменных функций, поскольку является языковой конструкцией.
Функция print_r не относится к
Функции sprintf и printf обрабатывают переданную им
Для того чтобы определить, входит ли данная подстрока в состав . Синтаксис такой:
strpos (исходная строка,строка для поиска
[,с какого символа искать])
Она возвращает позицию появления искомой false, если вхождение не найдено. Дополнительный аргумент позволяет задавать символ, начиная с которого будет производиться false эта функция может возвращать и другие значения, которые приводятся к false (например, 0 или ""). Поэтому для того, чтобы проверить, найдена ли искомая === ".
<? $str = "Идея наносить данные на перфокарты и затем считывать и обрабатывать их автоматически принадлежала Джону Биллингсу, а ее техническое решение осуществил Герман Холлерит. Перфокарта Холлерита оказалась настолько удачной, что без малейших изменений просуществовала до наших дней."; $pos = strpos($str,"Холлерит"); if ($pos !== false) echo "Искомая строка встречена в позиции номер $pos "; else echo "Искомая строка не найдена"; /* заметим, что мы проверяем значение $pos на эквивалентность с false. Иначе строка, находящаяся в первой позиции, не была бы найдена, так как 0 интерпретируется как false. */ ?>
Если значение параметра строка_для_поиска не является
Например, если мы напишем $pos = то интерпретатор будет считать, что мы ищем символ " д ". Если добавить эту строчку в приведенный выше пример и вывести результат, то получим сообщение, что искомая 1.
Функция, обратная по смыслу ord, – это . Она по ASCII-коду выводит символ, соответствующий этому
С помощью функции можно найти номер только первого появления . Ее синтаксис таков:
strrpos (исходная строка, символ для поиска)
В отличие от эта функция позволяет найти позицию последнего появления в
Бывают ситуации, когда знать позицию, где находится искомая и , но можно сделать и проще –
Говоря о :
strstr (исходная строка, строка для поиска)
Она находит первое появление искомой
Если false. Если можно использовать абсолютно идентичную ей функцию .
Пример 8.4. Выделим из
<?
$str = "Автор: Иванов Иван (<a
href=mailto:van@mail.ru>написать письмо</a>),
Название: 'Исследование языков
программирования' ";
echo "<b>Исходная строка: </b>",$str;
if (!strstr($str, "Название"))
echo "Строка не найдена<br>";
else echo "<p><b>Полученная подстрока: </b>",
strstr($str, "Название");
?>
В результате получим:
Исходная строка: Автор: Иванов Иван
(написать письмо),
Название: 'Исследование языков
программирования'
Полученная подстрока: Название:
'Исследование языков программирования'
Для реализации регистронезависимого поиска подстроки существует соответствующий аналог этой функции – функция . Действует и используется она точно так же, как и , за исключением того, что регистр, в котором записаны символы искомой
Очевидно, что функция не слишком часто используется – на практике редко бывает нужно получить подстроку, начинающуюся с определенного слова или
Иногда мы не знаем, с каких символов начинается искомая . Ее синтаксис можно записать следующим образом:
substr (исходная строка,
позиция начального символа [, длина])
Эта функция возвращает часть длина, начиная с символа, указанного параметром позиция начального символа. Позиция, с которой начинается выделяемая подстрока, может быть как положительным целым числом, так и отрицательным. В последнем случае отсчет элементов производится с конца длина опущен, то возвращает подстроку от указанного символа и до конца исходной
Пример 8.5. Допустим, у нас есть фраза, выделенная жирным шрифтом с помощью тега <b> языка HTML. Мы хотим получить эту же фразу, но в обычном стиле. Напишем такую программу:
<?php $word = "<b>Hello, world!</b>"; echo $word , "<br>"; $pure_str = substr($word, 3, -4); /* выделяем подстроку, начиная с 3-го символа, не включая 4 символа с конца строки */ echo $pure_str; ?>
В результате работы этого скрипта получим:
Hello, world! Hello, world!
На самом деле решить такую задачу можно гораздо проще, с помощью функции :
strip_tags (строка [, допустимые теги])
Эта функция возвращает
<?php
$string = "<b>Bold text</b>
<i>Italic text</i>";
$str = strip_tags($string);
// удаляем все теги из строки
$str1 = strip_tags($string, '<b>');
// удаляем все теги кроме тега <b>
$str2 = strip_tags($string, '<i>');
// удаляем все теги кроме тегов <i>
echo $str,"<br>",$str1,"<br>", $str2;
?>
В результате получим:
Bold text Italic text
Bold text Italic text
Bold text Italic text
Приведем другой пример использования функции . Допустим, у нас есть какое-то сообщение с приветствием и подписью автора. Мы хотим удалить сначала приветствие, а потом и подпись, оставив только содержательную часть сообщения.
<?php
$text = "Привет! Сегодня мы изучаем работу
со строками. Автор.";
$no_hello = substr($text, 8);
// убираем приветствие
$content = substr($text, 8, 38);
// то же самое, что substr($text, 8, -6).
// Убираем подпись.
echo $text, "<br>", $no_hello,
"<br>", $content;
?>
В результате получим:
Привет! Сегодня мы изучаем работу
со строками. Автор.
Сегодня мы изучаем работу со строками. Автор.
Сегодня мы изучаем работу со строками.
Если нам нужно получить один конкретный символ из . Можно воспользоваться более простым синтаксисом – записывая номер символа в фигурных скобках после имени строковой переменной. В контексте предыдущего примера букву " р ", расположенную второй по счету, можно получить так:
echo $text{1}; // выведет символ "р"
Заметим, что номером этого символа является число один, а не два, так как нумерация символов
Раз уж мы начали говорить о символах в . Например, и равна 32 символам.
Итак, как выделять и находить подстроки, мы рассмотрели. Теперь научимся заменять
Для . Это простая и удобная функция, позволяющая решать множество задач, не требующих особых тонкостей при выборе заменяемой подстроки. Для того чтобы производить ereg_replace() и preg_replace(). Синтаксис функции такой:
str_replace(искомое значение,
значение для замены, объект)
Функция ищет в рассматриваемом объекте значение и
Если объект, в котором производится поиск и
<?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] => День добрый, товарищи )
Функция . Однако эта функция поддерживается не во всех версиях PHP.
Еще один пример использования функции – обработка шаблонов.
Обратимся в очередной раз к описанию какого-либо документа, например статьи. Много раз мы уже создавали форму для ввода подобного описания и даже отображали данные, введенные пользователем в такого рода форму. Но как отображать эти данные, мы описывали непосредственно в коде нашей программы. Теперь мы хотим, чтобы способ отображения данных задавал сам пользователь. Для этого добавим в нашу форму еще один элемент для ввода шаблона.
<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=textarea 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-теги, а набор <!имя_элемента> определяет значение элемента с именем имя_элемента. Далее, как обрабатывать такого рода шаблоны? Можно использовать функцию :
<?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) Форма для ввода описания документа "статья" и шаблона для его отображения
Эта функция сочетает в себе свойства двух уже рассмотренных нами функций – функции и . Ее синтаксис таков:
substr_replace (исходная строка,
строка для замены,
позиция начального символа [, длина])
Эта функция позиция начального символа. С помощью дополнительного аргумента длина можно ограничить число заменяемых символов. То есть, фактически, мы не указываем конкретно от .
Как и в случае с функцией аргументы позиция начального символа и длина могут быть отрицательными. Если позиция начального символа отрицательна, то
<?php
$text = "Меня зовут Вася.";
echo "Исходная строка: $text<hr>\n";
/* Следующие две строки заменят всю
исходную строку строкой 'А меня – Петя' */
echo substr_replace($text, 'А меня – Петя',
0) . "<br>\n";
echo substr_replace($text, 'А меня – Петя',
0, strlen($text)) . "<br>\n";
// Следующая строка добавит слово 'Привет! '
// в начало исходной строки
echo substr_replace($text, 'Привет! ',
0, 0) . "<br>\n";
// Следующие две строки заменят имя Вася
// на имя Иван в исходной строке
echo substr_replace($text, 'Иван', 11,
-1) . "<br>\n";
echo substr_replace($text, 'Иван', -5,
-1) . "<br>\n";
?>
В результате работы этого скрипта получим:
Исходная строка: Меня зовут Вася. ------------------------------------------ А меня – Петя А меня – Петя Привет! Меня зовут Вася. Меня зовут Иван. Меня зовут Иван.
Очень полезные функции – функция
explode(разделитель,исходная строка
[,максимальное число элементов])
split (шаблон, исходная строка
[, максимальное число элементов])
preg_split (шаблон, исходная строка
[, максимальное число элементов
[,флаги]])
Последние две функции работают с регулярными выражениями, поэтому в данной лекции мы их рассматривать не будем. Рассмотрим более простую функцию – .
Функция максимальное число элементов, то вернет false. Если символа разделителя в исходной
Пример 8.11. мы хотим создать элемент формы – выпадающий список и значения для этого списка должен ввести пользователь, не знакомый с языком html. Создадим такую форму:
<form action=exp.php>
Введите варианты для выбора автора статьи
через двоеточие (":"):<br>
<input type=text name=author size=40>
<br>
<input type=submit value="Создать элемент">
</form>
Скрипт, который будет ее обрабатывать (exp.php), может быть таким:
<?php
$str = $_GET["author"];
$names = explode(":",$str);
// разбиваем строку введенную,
// пользователем с помощью ":"
$s = "<select name=author>";
// создаем выпадающий список
foreach ($names as $k => $name) {
$s .= "<option value=$k>$name";
// добавляем элементы к списку
}
$s .= "</select>";
echo $s;
?>
В итоге, если мы введем такую строчку в форму:
(рис 8.2) Ввод значений для создания выпадающего спискато получим следующий выпадающий список:
(рис 8.3) Выпадающий список, полученный в результате обработки формыКроме :
Эта функция объединяет элементы массива с помощью переданного ей объединяющего элемента (например, запятой). В отличие от функции , порядок аргументов в функции не имеет значения.
Пример 8.12. Допустим, мы храним имя, фамилию и отчество человека по отдельности, а выводить их на странице нужно вместе. Чтобы :
<?php
$data = array("Иванов","Иван","Иванович");
$str = implode(" ", $data);
echo $str;
?>
В результате работы этого скрипта получим
Иванов Иван Иванович
У функции существует псевдоним – функция join(), т.е. эти две функции отличаются лишь именами.
Достаточно часто мы работаем со или , то мы не увидим самих html-тегов, а получим отформатированную в соответствии с этими тегами .
Функция переводит специальные символы, такие как "<", ">", "", """ , "'" в такие сущности языка HTML, как "lt;", "gt;", "amp;", "quot;", "#039;" соответственно.
Дополнительный аргумент стиль кавычек определяет, как должны интерпретироваться двойные и одинарные кавычки. Он может иметь одно из трех значений: ENT_COMPAT, ENT_QUOTES, ENT_NOQUOTES. Константа ENT_COMPAT означает, что двойные кавычки должны быть переведены в спецсимволы, а одинарные должны остаться без изменений. ENT_QUOTES говорит, что должны конвертироваться и двойные и одинарные кавычки, а ENT_NOQUOTES оставляет и те и другие кавычки без изменений.
В параметре кодировка могут быть заданы такие кодировки, как UTF-8, ISO-8859-1 и другие (русские кодировки также поддерживаются - см. http://ru2.php.net/manual/en/function.htmlspecialchars.php).
<?php
$new = htmlspecialchars("<a
href='mailto:au@mail.ru'>
Написать письмо</a>", ENT_QUOTES);
echo $new;
/* наша строка перекодируется в такую:
lt;a href=#039;mailto:au@mail.ru#039;gt;
Написать письмоlt;/agt; */
В браузере мы увидим:
<a href='mailto:au@mail.ru'> Написать письмо</a>
Функция перекодирует только наиболее часто используемые спецсимволы. Если необходимо конвертировать все символы в сущности HTML, следует задействовать функцию . Русские буквы при использовании этой функции тоже кодируются специальными последовательностями. Например, буква " А " заменяется комбинацией " Agrave; ". Ее синтаксис и принцип действия аналогичен синтаксису и принципу действия .
Итак, мы завершили знакомство с функциями работы со
Вероятно, читатели примерно представляют, что такое тип данных "
<?php
echo 'В такой строке НЕ обрабатываются
переменные и большинство
последовательностей';
echo "Здесь переменные и последовательности
обрабатываются";
echo <<<EOT
Здесь тоже обрабатываются как переменные,
так и управляющие последовательности.
И кроме того, можно вводить символы кавычек
без их экранирования обратным слэшем.
EOT;
?>
Уже не раз, начиная с самой первой лекции, мы использовали функцию . На самом деле, – не функция, а языковая конструкция, поэтому использовать при ее вызове круглые скобки не обязательно. позволяет выводить на экран может быть сколько угодно. Их разделяют запятыми или объединяют с помощью оператора конкатенации и никогда не заключают в круглые скобки.
<?
echo "Пришел ", "увидел ", "победил ";
// выведет строку "Пришел увидел победил"
// многие предпочитают передавать несколько
// параметров в echo с помощью конкатенации
echo "Пришел " . "увидел " . "победил ";
// тоже выведет строку
// "Пришел увидел победил"
echo ("Пришел ", "увидел ", "победил ");
// выдаст ошибку: unexpected ','
?>
Существует сокращенный синтаксис для команды :
<?=строка_для_вывода?>
Здесь параметр строка_для_вывода содержит
Например, такой скрипт выведет на экран красным цветом "Меня зовут Вася":
<? $name="Вася" ?> <font color=red>Меня зовут <?=$name?></font>
Кроме языковой конструкции существует ряд функций для вывода и ее разновидности printf, sprintf и т.п.
Функция позволяет выводить на экран только одну , не может быть вызвана с помощью переменных функций, поскольку является языковой конструкцией.
Функция print_r не относится к
Функции sprintf и printf обрабатывают переданную им
Для того чтобы определить, входит ли данная подстрока в состав . Синтаксис такой:
strpos (исходная строка,строка для поиска
[,с какого символа искать])
Она возвращает позицию появления искомой false, если вхождение не найдено. Дополнительный аргумент позволяет задавать символ, начиная с которого будет производиться false эта функция может возвращать и другие значения, которые приводятся к false (например, 0 или ""). Поэтому для того, чтобы проверить, найдена ли искомая === ".
<? $str = "Идея наносить данные на перфокарты и затем считывать и обрабатывать их автоматически принадлежала Джону Биллингсу, а ее техническое решение осуществил Герман Холлерит. Перфокарта Холлерита оказалась настолько удачной, что без малейших изменений просуществовала до наших дней."; $pos = strpos($str,"Холлерит"); if ($pos !== false) echo "Искомая строка встречена в позиции номер $pos "; else echo "Искомая строка не найдена"; /* заметим, что мы проверяем значение $pos на эквивалентность с false. Иначе строка, находящаяся в первой позиции, не была бы найдена, так как 0 интерпретируется как false. */ ?>
Если значение параметра строка_для_поиска не является
Например, если мы напишем $pos = то интерпретатор будет считать, что мы ищем символ " д ". Если добавить эту строчку в приведенный выше пример и вывести результат, то получим сообщение, что искомая 1.
Функция, обратная по смыслу ord, – это . Она по ASCII-коду выводит символ, соответствующий этому
С помощью функции можно найти номер только первого появления . Ее синтаксис таков:
strrpos (исходная строка, символ для поиска)
В отличие от эта функция позволяет найти позицию последнего появления в
Бывают ситуации, когда знать позицию, где находится искомая и , но можно сделать и проще –
Говоря о :
strstr (исходная строка, строка для поиска)
Она находит первое появление искомой
Если false. Если можно использовать абсолютно идентичную ей функцию .
Пример 8.4. Выделим из
<?
$str = "Автор: Иванов Иван (<a
href=mailto:van@mail.ru>написать письмо</a>),
Название: 'Исследование языков
программирования' ";
echo "<b>Исходная строка: </b>",$str;
if (!strstr($str, "Название"))
echo "Строка не найдена<br>";
else echo "<p><b>Полученная подстрока: </b>",
strstr($str, "Название");
?>
В результате получим:
Исходная строка: Автор: Иванов Иван
(написать письмо),
Название: 'Исследование языков
программирования'
Полученная подстрока: Название:
'Исследование языков программирования'
Для реализации регистронезависимого поиска подстроки существует соответствующий аналог этой функции – функция . Действует и используется она точно так же, как и , за исключением того, что регистр, в котором записаны символы искомой
Очевидно, что функция не слишком часто используется – на практике редко бывает нужно получить подстроку, начинающуюся с определенного слова или
Иногда мы не знаем, с каких символов начинается искомая . Ее синтаксис можно записать следующим образом:
substr (исходная строка,
позиция начального символа [, длина])
Эта функция возвращает часть длина, начиная с символа, указанного параметром позиция начального символа. Позиция, с которой начинается выделяемая подстрока, может быть как положительным целым числом, так и отрицательным. В последнем случае отсчет элементов производится с конца длина опущен, то возвращает подстроку от указанного символа и до конца исходной
Пример 8.5. Допустим, у нас есть фраза, выделенная жирным шрифтом с помощью тега <b> языка HTML. Мы хотим получить эту же фразу, но в обычном стиле. Напишем такую программу:
<?php $word = "<b>Hello, world!</b>"; echo $word , "<br>"; $pure_str = substr($word, 3, -4); /* выделяем подстроку, начиная с 3-го символа, не включая 4 символа с конца строки */ echo $pure_str; ?>
В результате работы этого скрипта получим:
Hello, world! Hello, world!
На самом деле решить такую задачу можно гораздо проще, с помощью функции :
strip_tags (строка [, допустимые теги])
Эта функция возвращает
<?php
$string = "<b>Bold text</b>
<i>Italic text</i>";
$str = strip_tags($string);
// удаляем все теги из строки
$str1 = strip_tags($string, '<b>');
// удаляем все теги кроме тега <b>
$str2 = strip_tags($string, '<i>');
// удаляем все теги кроме тегов <i>
echo $str,"<br>",$str1,"<br>", $str2;
?>
В результате получим:
Bold text Italic text
Bold text Italic text
Bold text Italic text
Приведем другой пример использования функции . Допустим, у нас есть какое-то сообщение с приветствием и подписью автора. Мы хотим удалить сначала приветствие, а потом и подпись, оставив только содержательную часть сообщения.
<?php
$text = "Привет! Сегодня мы изучаем работу
со строками. Автор.";
$no_hello = substr($text, 8);
// убираем приветствие
$content = substr($text, 8, 38);
// то же самое, что substr($text, 8, -6).
// Убираем подпись.
echo $text, "<br>", $no_hello,
"<br>", $content;
?>
В результате получим:
Привет! Сегодня мы изучаем работу
со строками. Автор.
Сегодня мы изучаем работу со строками. Автор.
Сегодня мы изучаем работу со строками.
Если нам нужно получить один конкретный символ из . Можно воспользоваться более простым синтаксисом – записывая номер символа в фигурных скобках после имени строковой переменной. В контексте предыдущего примера букву " р ", расположенную второй по счету, можно получить так:
echo $text{1}; // выведет символ "р"
Заметим, что номером этого символа является число один, а не два, так как нумерация символов
Раз уж мы начали говорить о символах в . Например, и равна 32 символам.
Итак, как выделять и находить подстроки, мы рассмотрели. Теперь научимся заменять
Для . Это простая и удобная функция, позволяющая решать множество задач, не требующих особых тонкостей при выборе заменяемой подстроки. Для того чтобы производить ereg_replace() и preg_replace(). Синтаксис функции такой:
str_replace(искомое значение,
значение для замены, объект)
Функция ищет в рассматриваемом объекте значение и
Если объект, в котором производится поиск и
<?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] => День добрый, товарищи )
Функция . Однако эта функция поддерживается не во всех версиях PHP.
Еще один пример использования функции – обработка шаблонов.
Обратимся в очередной раз к описанию какого-либо документа, например статьи. Много раз мы уже создавали форму для ввода подобного описания и даже отображали данные, введенные пользователем в такого рода форму. Но как отображать эти данные, мы описывали непосредственно в коде нашей программы. Теперь мы хотим, чтобы способ отображения данных задавал сам пользователь. Для этого добавим в нашу форму еще один элемент для ввода шаблона.
<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=textarea 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-теги, а набор <!имя_элемента> определяет значение элемента с именем имя_элемента. Далее, как обрабатывать такого рода шаблоны? Можно использовать функцию :
<?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) Форма для ввода описания документа "статья" и шаблона для его отображения
Эта функция сочетает в себе свойства двух уже рассмотренных нами функций – функции и . Ее синтаксис таков:
substr_replace (исходная строка,
строка для замены,
позиция начального символа [, длина])
Эта функция позиция начального символа. С помощью дополнительного аргумента длина можно ограничить число заменяемых символов. То есть, фактически, мы не указываем конкретно от .
Как и в случае с функцией аргументы позиция начального символа и длина могут быть отрицательными. Если позиция начального символа отрицательна, то
<?php
$text = "Меня зовут Вася.";
echo "Исходная строка: $text<hr>\n";
/* Следующие две строки заменят всю
исходную строку строкой 'А меня – Петя' */
echo substr_replace($text, 'А меня – Петя',
0) . "<br>\n";
echo substr_replace($text, 'А меня – Петя',
0, strlen($text)) . "<br>\n";
// Следующая строка добавит слово 'Привет! '
// в начало исходной строки
echo substr_replace($text, 'Привет! ',
0, 0) . "<br>\n";
// Следующие две строки заменят имя Вася
// на имя Иван в исходной строке
echo substr_replace($text, 'Иван', 11,
-1) . "<br>\n";
echo substr_replace($text, 'Иван', -5,
-1) . "<br>\n";
?>
В результате работы этого скрипта получим:
Исходная строка: Меня зовут Вася. ------------------------------------------ А меня – Петя А меня – Петя Привет! Меня зовут Вася. Меня зовут Иван. Меня зовут Иван.
Очень полезные функции – функция
explode(разделитель,исходная строка
[,максимальное число элементов])
split (шаблон, исходная строка
[, максимальное число элементов])
preg_split (шаблон, исходная строка
[, максимальное число элементов
[,флаги]])
Последние две функции работают с регулярными выражениями, поэтому в данной лекции мы их рассматривать не будем. Рассмотрим более простую функцию – .
Функция максимальное число элементов, то вернет false. Если символа разделителя в исходной
Пример 8.11. мы хотим создать элемент формы – выпадающий список и значения для этого списка должен ввести пользователь, не знакомый с языком html. Создадим такую форму:
<form action=exp.php>
Введите варианты для выбора автора статьи
через двоеточие (":"):<br>
<input type=text name=author size=40>
<br>
<input type=submit value="Создать элемент">
</form>
Скрипт, который будет ее обрабатывать (exp.php), может быть таким:
<?php
$str = $_GET["author"];
$names = explode(":",$str);
// разбиваем строку введенную,
// пользователем с помощью ":"
$s = "<select name=author>";
// создаем выпадающий список
foreach ($names as $k => $name) {
$s .= "<option value=$k>$name";
// добавляем элементы к списку
}
$s .= "</select>";
echo $s;
?>
В итоге, если мы введем такую строчку в форму:
(рис 8.2) Ввод значений для создания выпадающего спискато получим следующий выпадающий список:
(рис 8.3) Выпадающий список, полученный в результате обработки формыКроме :
Эта функция объединяет элементы массива с помощью переданного ей объединяющего элемента (например, запятой). В отличие от функции , порядок аргументов в функции не имеет значения.
Пример 8.12. Допустим, мы храним имя, фамилию и отчество человека по отдельности, а выводить их на странице нужно вместе. Чтобы :
<?php
$data = array("Иванов","Иван","Иванович");
$str = implode(" ", $data);
echo $str;
?>
В результате работы этого скрипта получим
Иванов Иван Иванович
У функции существует псевдоним – функция join(), т.е. эти две функции отличаются лишь именами.
Достаточно часто мы работаем со или , то мы не увидим самих html-тегов, а получим отформатированную в соответствии с этими тегами .
Функция переводит специальные символы, такие как "<", ">", "", """ , "'" в такие сущности языка HTML, как "lt;", "gt;", "amp;", "quot;", "#039;" соответственно.
Дополнительный аргумент стиль кавычек определяет, как должны интерпретироваться двойные и одинарные кавычки. Он может иметь одно из трех значений: ENT_COMPAT, ENT_QUOTES, ENT_NOQUOTES. Константа ENT_COMPAT означает, что двойные кавычки должны быть переведены в спецсимволы, а одинарные должны остаться без изменений. ENT_QUOTES говорит, что должны конвертироваться и двойные и одинарные кавычки, а ENT_NOQUOTES оставляет и те и другие кавычки без изменений.
В параметре кодировка могут быть заданы такие кодировки, как UTF-8, ISO-8859-1 и другие (русские кодировки также поддерживаются - см. http://ru2.php.net/manual/en/function.htmlspecialchars.php).
<?php
$new = htmlspecialchars("<a
href='mailto:au@mail.ru'>
Написать письмо</a>", ENT_QUOTES);
echo $new;
/* наша строка перекодируется в такую:
lt;a href=#039;mailto:au@mail.ru#039;gt;
Написать письмоlt;/agt; */
В браузере мы увидим:
<a href='mailto:au@mail.ru'> Написать письмо</a>
Функция перекодирует только наиболее часто используемые спецсимволы. Если необходимо конвертировать все символы в сущности HTML, следует задействовать функцию . Русские буквы при использовании этой функции тоже кодируются специальными последовательностями. Например, буква " А " заменяется комбинацией " Agrave; ". Ее синтаксис и принцип действия аналогичен синтаксису и принципу действия .
Итак, мы завершили знакомство с функциями работы со
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.