Упражнения и задачи по JavaScript

1. Создать кнопку Hi, на которой отображается надпись “Привет”, а обработчик события onclick вызывает диалоговое окно предупреждения, содержащее строку Hello to you, too! (Привет и тебе!).

2. Создайте сценарий, в котором использовался бы оператор: document.write("Hello, world.");. Сценарий должен запускаться при загрузке HTML-документа. В сценарий необходимо добавить комментарий, поясняющий принцип выполнения операторов этого сценария и вывести краткое пояснение в диалоговое окно.

3. Загрузка и манипулирование с изображениями на JavaScript.

4. Создайте HTML-документ, который сразу после загрузки страницы будет отображать диалоговое окно с предупреждением. Другое диалоговое окно должно отображаться при щелчке пользователя на кнопке формы.

5. Напишите оператор JavaScript, который отображает сообщение в строке состояния, приветствующее новых посетителей Web-страницы.

6. Напишите оператор JavaScript, который отображает приветствие новых посетителей Web-страницые на уровне заголовка <hl > страницы.

7. Создайте страницу, которая предлагает (в диалоговом окне) пользователю ввести его или ее имя, а после этого будет приветствовать его (ее) по имени. Приветствие должно отображаться в основной части страницы.

8. Создайте страницу, содержащую произвольный текст. Сразу после загрузки она должна автоматически выводить диалоговое окно с адресом URL текущей страницы.

9. Создать страницу, использующую операторы:

window.status = "Welcome to my Web page.";

document.write("<hl>Welcome to my Web page.</hl>")

Наведение курсора на эти строки должно вызывать диалоговые окна, поясняющие работу этих операторов.

10. Манипулирование окнами: изменение размера, цвета и др.

11. Сценарий в разделе body вызывает функцию, которая возвращает текст, введенный в диалоговом окне prompt ().

<html> <head>

<script type=text/javascript">

function askName() {

var name = prompt ("What is your name, please?11,"")

return name

}

</script>

</head>

<body>

<script type="text/javascript">.

document.write("Welcome to my web page, " + askName() + ".")

</script>

</body>

</html>

По событию onclick вывести это сообщение в окно статуса состояния и в другие диалоговые окна.

12. Адрес URL получен из свойства href объекта location.

<html> <head>

<script type="text/javascript">

function showLocation() {

alert("This page is at: " + location.href);

}

</script> </head>

<body onload="showLocation()"> Bu, be, by.

</body> </html>

Создать кнопку и по событию onclick вывести это сообщение в окно статуса состояния и в другие диалоговые окна.

13. Обработчики событий JavaScript.

14. Навигация по сайту

15. JavaScript и таблица стилей

16. Определение типа ОС клиента.

17. Определение типа браузера клиента.

18. Создание контекстного меню.

19. Раскрывающееся окно.

20. Таймер-часы.

21. Приветствие посетителя с учетом времени суток(утро, день, вечер).

22. Календарь.

23. Формы. Проверка информации, вводимой и посредством форм. Проверка наличия во вводимой строке определенных символов.

24. Рисунки на веб-сайте.

25. Слои на веб-сайте.

26. Вычисления на веб-сайте.

27. Создать игру типа: “Угадай задуманное число”.

28. Создать различные меню на JavaScript.

29. Создать объект калькулятор.

30. Создать объект бегущая строка.

31. Перекодировщик русских символов

32. Автоматическая регистрация страниц на поисковых системах. Программа выполняется на стороне клиента.

33. Время в JavaScript (получение и установка даты-времени).

34. Создать Web-страницу с «бегущим текстом» в строке состояния браузера

35. Задание задержек по времени при выполнении функций. Программирование картинок.

36. Управление слоями.

37. Создать Web-страницу со слоем, появляющимся при нажатии на кнопку «Невидимка», и исчезающем при повторном нажатии на кнопку «Невидимка».

38. Программирование форм. Создать Web-страницу с викториной из 7-ми вопросов с 5-ю возможными вариантами ответов.

39. Создание тестирующей программы.

40. Голосование

41. Создание фреймов.

42. Органайзер

43. Авторизация на JavaScript

44. Решение квадратных уравнений -------х2 +------х +-------- =0

45. Проверка доступности cookie.

46. Объекты JavaScript.

47. DOM.

48. DOM и AJAX.

49. Работа с текстовыми строками из формы: объединение, сравнение, нахождение длины, удаление HTML-тегов из строки, удаление пробелов вначале и в конце.

50. Перевод строки в разные кодировки: KOI8-R, WINDOWS-1251, UNICODE.

51. Конвертация даты из одного формата в другой.

52. Проверка данных, вводимых пользователем в форму:

а) Проверка обязательных для ввода полей

b) Проверка допустимости вводимых данных

c) Удаление HTML тегов

d) Удаление обратных слешей

52. Создать прототип для списка личностей(актеров, спортсменов, ученых, политиков, писателей). Личность:

{// свойства:

name //(имя);

birthYear //(год рождения);

country //(страна проживания, по умолчанию USA);

alive //(жив ли, по умолчанию – true).

}

Добавить методы:

setCountry() – присваивает название страны соответствующему свойству и проверяет является ли название страны корректным setBirthYear –присвавает свойству значение года рождения и проверяет являет ли значение корректным.

Список личностей реализуется с помощью объекта “Spisok”:

{ supermans // массив личностей;

length // количество членов в списке.

}

Добавить к списку следующие методы:

Add () (добавить в список), Remove() (удалить из списка), Replace() (заменить в списке). Заполнить список 5-10 элементами.

Написать функцию, которая будет при загрузке страницы создавать таблицу со списком актеров (для создания таблицы используйте функции insertRow и insertCell, описание которых можно посмотреть в MSDN). Таблица должна будет содержать следующие колонки: порядковый номер, имя, год рождения, страна, жив или нет.

Имя в таблице должно быть ссылкой, при нажатии на которую данные актера должны загружаться в форму (которая должна быть на странице), форма должна иметь два кнопки: Сохранить и Отменить, соответственно должны быть написаны функции для очистки формы и для сохранения данных (после сохранения данные в таблице должны обновиться).

Написать функции для сортировки данных в таблице: название каждой колонки должно быть ссылкой, после нажатия по которой они сортируются. По умолчанию сортировка должна идти по возврастанию, если же по какой-то колонке нажать дважды, то сортировка должна становиться по убыванию. Причем если при сортировке несколько актеров имеют одинаковый параметр (например, год рождения), то должны сравниваться имена актеров. Для изображения направления сортировки используйте стрелки в конце названия столбца (стрелки реализуются с помощью HTML-символов с кодами 9650 и 9660).

Глава 5. Язык серверных скриптов PHP

Язык PHP является одним из самых простых и мощных скриптовых языков, предназначенных для разработки серверной части сайта и исполняемых на стороне сервера. Язык PHP был разработан Расмусом Лердорфом в 1994 году. Считается, чтто название PHP произошло от словосочетания Personal Home Page Tools. Более современная аббревиатура PHP - “Препроцессор гипертекста”. Скрипты PHP обрабатывают на сервере передаваемый с помощью браузера запрос клиента, и возвращают клиенту результат работы серверной части сайта. Использование на сайте PHP – скриптов позволяет добавить на сайт множество таких элементов как формы для обратной связи, счетчики посещений, гостевые книги, форумы, голосования. К более сложным элементам относятся системы управления сайтом. С помощью таких систем можно добиться персонализации сайта и его легкого обновления.

Возможности PHP.

Web-страницы содержат не только текст, картинки и гиперссылки, но и ряд сервисов: регистрацию, поиск информации, продажу, конференции, службы новостей и т.п. PHP работает как часть Web-сервера, быстро и дешево. Cинтаксис PHP подобен синтаксису C++, хотя современная объектная модель более близка к модели объектов Java. Программы, написанные на PHP, просты для понимания. PHP обеспечивает высокую скорость работы. Имеет открытый исходный код. На PHP можно обрабатывать данные, полученные из клиентских форм, генерировать динамические страницы, получать и посылать файлы cookies, содержащие индивидуальную информацию о посетителе. PHP обеспечивает поддержку различных баз данных. Отметим, что широкое распространение получила связка PHP с БД MySQL.

PHP понимает почтовые протоколы POP3 и SMTP, протоколы передачи данных TCP/IP, протокол передачи гипертекста HTTP и другие, а также имеет возможность работать с файлами и сокетами.

Инструменты для разработки

Одним из лучших браузеров для разработки является Firefox. Хорошим редактором для разработки кода PHP является редактор “Adobe DreamWeaver CS5” с возможными расширениями (JQuery API). Программисты Java могут использовать для разработки PHP- скриптов среду разработки Eclipse и плогины к Eclipse JSEclipse и Aptana Studio.

Для выполнения PHP необходим web-серверApache, препроцессор PHP и база данных MySql, которые устанавливаются на удаленном сервере. Для работы с файлами полезной будет программа Total Comander, которая позволяет разместить PHP – приложение на удаленном сервере. Для этого необходим хостинг сайта и DNS - адрес. Отладка PHP – сайта возможна на локальном (localhost) компьютере

Как PHP работает

Нужно соблюсти несколько требований, чтобы сервер мог выполнять программы на PHP. Расширение файла, содержащего код, может быть PHP, HTM, HTML или PHTML. В конфигурационном файле WEB-Сервера Apache необходимо добавить директиву обработки этого типа файлов: AddType. Для функционирования PHP сам препроцессор должен быть установлен на сервере в одном каталоге вместе с Apache. Необходимо загрузить Веб-сервер Apache, затем сервер MySql. Загрузить браузер и в окне набрать адрес www.localhost/name.php.

Код PHP может быть оформлен следующими способами:

<?php //стиль xml

//php инструкции

?>

В сокращенном варианте символы php после вопросительного знака отсутствуют, каждый скрипт открывается тегом <? и закрывается ?>. После этого скрипт может сохранятся и исполнятся в виде файла с расширением .php или помещаться внутрь html –документа.

Пример простого файла с PHP:

<!—pr0.php -->

<html>

<head> </head>

<script language="php">

print "Hello,world-Первый способ вставки кода PHP<BR>";

</script>

<body>

Вставка кода PHP внутрь документа Html<BR>

<?

print "Hello, to you - второй способ вставки кода PHP<BR>";

?>

<?php

echo "А это внутри PHP - третий способ вставки кода PHP<BR><HR>";

phpinfo(); //возвращает много информации о версии

// и настройках php

?>

</body>

</html>

Вывод:

Hello,world-Первый способ вставки кода PHP

Вставка кода PHP внутрь документа Html

Hello, to you - второй способ вставки кода PHP

А это внутри PHP - третий способ вставки кода PHP

Как видно из примера, скрипт PHP, содержащий команду echo, внедрен внутрь HTML документа. Оператор echo (string arg1, string arg2, string argn) выводит все параметры. Для вывода в PHP могут использоваться операторы вывода print, аналогичные echo(). С операторами print() и echo() не обязательно использовать скобки. Скобки должны быть обязательно использованы для оператора форматированного вывода: printf(“format”, arglist).

PHP позволяет использовать такие структуры:

<?php //pr1.php

$exp=true;

if ($exp) {

?>

<strong>Это истина.</strong>

<?php

}

else {

?>

<strong>Это ложь.</strong>

<?php

}

printf("<br> %s", "Выход из режима интерпретации позволяет вывести большой текст");

?>

Вывод:

Это истина.

Выход из режима интерпретации позволяет вывести большой текст.

Когда PHP встречает закрывающие теги ?>, он просто выводит все, что он находит до следующего открывающего тега. Приведенный в примере выход из режима интерпретации PHP для вывода больших блоков текста более эффективен, чем отправка текста через echo() или print() .

Типы данных

PHP поддерживает 4 скалярных типа данных: boolean (значения true и false), integer (значения целые числа, которые могут быть десятичными, восьмеричными и шестнадцатиричными), float (вещественные числа с плавающей точкой типа double), string(в одинарных и двойных апостофах) и два составных типа: array и object. Кроме этого имеется два специальных типа: resource и NULL. Перед целыми восьмеричными значениями записывается нуль, перед шестнадцатеричными – 0x. Рассмотрим пример

<?php //pr01.php

$a = 10;

$b = 020;//восьмеричное значение

$c = 0x41;//шестнадцатеричное значение

$d=3.62e+2;

printf("%d %o %c %f",$a,$b,$c,$d);

?>

Вывод:

10 20 A 362.000000

Здесь %d – формат для десятичного целого, %o – для восьмеричного, %c – для вывода символа с указанным кодом, %f - для вывода вещественных значений.

Если необходимо проверить тип и значение определенного выражения, можно использовать var_dump(). Если же для отладки необходимо просто удобочитаемое представление типа, используйте gettype(). Чтобы проверить выражение на определенный тип, применяйте для этого функцию is_type().

Имена всех переменных начинаются знаком $. PHP не требует явного определения типа при объявлении переменной, тип переменной определяется по присвоенному ей значению. То есть, если присвоить переменной $p строковое значение, $p становится строкой. Если затем присвоить переменной $p значение целого числа, то $p станет целым.

Для инициализации переменной в PHP ей просто присваивается значение. Кроме переменных могут быть использованы поименованные константы, объявленные в операторе define() без знака $. Рассмотрим пример:

<?php //pr2.php

define("d",5,true);

$a = "Добро пожаловать ";

$b = "в PHP";

$c = 4;

$c++;

echo "$a$b$c"; //получим - Добро пожаловать в PHP5

print d;//Вывод константы 5

$p=NULL;

print var_dump($p);

print gettype($a);

?>

Вывод:

Добро пожаловать в PHP55NULL string

Комментарии в PHP используются, как и в C++:

/*многострочный комментарий */ или

// однострочный комментарий или

#еще один однострочный комментарий.

Строки

Строки являются последовательностями символов, каждый символ соответствует байту. Это означает, что PHP не имеет встроенной поддержки Unicode. Некоторую поддержку Unicode обеспечивают функции utf8_encode() и utf8_decode(). Переход на кодировку Unicode запланирован в версии PHP6.

В PHP не существует ограничения на размер строк. Строковые значения могут присваиваться переменным. В PHP строковый литерал можно представлять следующими способами: строки в одиночных кавычках и строки в двойных кавычках. Строка, заключенная в двойные ковычки может содержать подстроку в одинарных ковычках и наоборот. Строка, заключенная в двойные кавычки, означает, что встречающиеся в этой строке переменные будут заменены их значениями. Если строка заключена в одинарные кавычки, такая замена не производится, так как такая строка не разбирается в PHP.

<?php //pr3.php

$name = 'Domine?';

$name_1 = "Quo vadis, $name";

$name_2 = ' Quo vadis, $name';

echo "$name_1"; // выведет - Quo vadis, Domine?

echo "$name_2"; // выведет - Quo vadis, $name

?>

Для строк в двойных кавычках PHP поддерживает также больше так называемых экранированных символов, которые могут встречаться среди символов строки: \n - перенос строки, \r- возврат каретки , \t- горизонтальная табуляция, \\- обратная косая черта, \$- знак доллара, \\"- двойная кавычка, \код – код символа.

Например:

$s=”\x41- это символ ‘a’ ”;

$st=” можно использовать \” управляющий \” символ”;

Самым важным свойством строк в двойных кавычках является обработка переменных, находящихся в строках.

Третий способ определения строк - это использование heredoc-синтаксиса ("<<<"). После <<< указывается идентификатор, затем идет строка, а потом этот же идентификатор, закрывающий строку. Закрывающий идентификатор должен начинаться в первом столбце строки. Строка с закрывающим идентификатором не содержит других символов, за исключением, точки с запятой (;). Это означает, что идентификатор не должен вводиться с отступом и не может быть никаких пробелов или знаков табуляции до или после точки с запятой. Первым символом перед закрывающим идентификатором должен быть символ новой строки. Например, \r. Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что нет необходимости экранировать кавычки в heredoc, но по-прежнему можно использовать управляющие последовательности. Пример определения heredoc-строки:

<?php

$name = "Max";

$str = <<<DEMO

Hello $name! <br/>

This is a demo message

with heredoc.

DEMO;

echo $str;

?>

Вывод:

Hello Max! This is a demo message with heredoc.

Если строка определяется в двойных кавычках, либо при помощи heredoc, переменные внутри нее обрабатываются. Существует два типа синтаксиса: простой и сложный. В простом синтаксисе если интерпретатор встречает знак ($), он захватывает столько символов, сколько можно, чтобы сформировать правильное имя переменной. Чтобы точно определить конец имени, заключайте имя переменной в фигурные скобки.

<?php

$beer = 'Речицкое';

echo "$beer's taste is great"; /* работает, 's - неверный символ для имени переменной */

echo "He drank some $beers"; /* не работает, 's' это верный символ для имени переменной*/

echo "He drank some ${beer}s"; // работает

echo "He drank some {$beer}s"; // работает

?>

Сложный (фигурный) синтаксис позволяет использовать сложные выражения.

Фактически, вы можете включить любое значение, находящееся в пространстве имени в строке с этим синтаксисом. Вы просто записываете выражение таким же образом, как и вне строки, а затем заключаете его в { и }. Поскольку вы не можете экранировать '{', этот синтаксис будет распознаваться только когда $ следует непосредственно за {. Поясняющий пример:

<?php

// Давайте покажем все ошибки

error_reporting(E_ALL);

$great = 'fantastic';

// Не работает, выведет: This is { fantastic}

echo "This is { $great}";

// Работает, выведет: This is fantastic

echo "This is {$great}";

echo "This is ${great}";

// Работает

echo "Этот квадрат шириной {$square->width}00 сантиметров.";

// Работает

echo "Это работает: {$arr[4][3]}";

// Это неверно по той же причине, что и $foo[bar] неверно вне

// строки. Другими словами, это по-прежнему будет работать,

// но поскольку PHP сначала ищет константу foo, это вызовет

// ошибку уровня E_NOTICE (неопределенная константа).

echo "Это неправильно: {$arr[foo][3]}";

// Работает. При использовании многомерных массивов, внутри

// строк всегда используйте фигурные скобки

echo "Это работает: {$arr['foo'][3]}";

// Работает.

echo "Это работает: " . $arr['foo'][3];

echo "Вы даже можете записать {$obj->values[3]->name}";

echo "Это значение переменной по имени $name: {${$name}}";

?>

В PHP существуют так называемые обратные ковычки (‘), унаследованные из языка Perl. Заключенные в них строки воспринимаются и выполняются как команды операционной системы. Например

<?php

echo ‘dir’; ?>

Массивы и инициализация массивов

Система PHP поддерживает массивы с числовыми индексами и ассоциативные массивы, в качестве индексов которых используется символьная строка.

Индексы массивов задаются в квадратных скобках и изменяются начиная с 0:

$massiv[0] = 'name';

$massiv[1] = 'phone';

Ассоциированные массивы (хэши) используют в качестве индексов строковые значения-ключ.

$new_massiv['name'] = 'Valera';

$new_massiv['email'] = '[email protected]';

Массив может инициализироваться одним из двух способов: последовательным присвоением значений, или посредством конструкции array(). При последовательном добавлении значений в массив, просто записываются значения элементов массива, используя пустой индекс. При этом каждое следующее значение будет добавляться в качестве последнего элемента массива.

$massiv[] = "третий"; //$massiv[2] = " третий "

$massiv[] = "четвертый";//$massiv[3] = " четвертый "

Второй способ создания массива реализуется путем вызова функции array():

$massiv = array('one','two','three');

Для ассоциированных массивов такой вызов будет иметь вид:

$new_massiv = array('name' => 'nobody', 'email' => '[email protected]');

Между индексом и значением помещается здесь знак =>. Рассмотрим пример:

<?php //pr45

$massiv = array('one','two','three');

$massiv[5]="5";

$massiv[6]="6";

$massiv[]="7";

print_r($massiv);

$new_massiv = array('name' => 'nobody', 'email' => '[email protected]');

print_r($new_massiv);

print $new_massiv['name']

?>

Результат:

Array ( [0] => one [1] => two [2] => three

[5] => 5 [6] => 6 [7] => 7 )

Array ( [name] => nobody [email] => [email protected] )

nobody

Функция print_r() используется для вывода всего массива.

PHP включает также ряд предопределенных или глобальных массивов. Их называют также суперглобальными переменными, так как они всегда присутствуют и доступны для всех блоков сценария PHP. Ниже показаны обычно используемые суперглобальные переменные PHP:

$_GET[]

$_POST[]

$_REQUEST[]

$_COOKIE[]

$_FILES[]

$_SERVER[]

$_ENV[]

$_SESSION[]

Следующий пример выполняет вывод значений элементов суперглобального массива $_SERVER

<?php //pr46

//print_r($_GET);

//print_r($_POST);

//print_r($_REQUEST);

//print_r($_COOKIE );

//print_r($_FILES);

print_r($_SERVER);

//print_r($_ENV);

//print_r($_SESSION);

?>

Результаты:

Array

(

[COMSPEC] => C:\WINDOWS\system32\cmd.exe

[DOCUMENT_ROOT] => z:/home/localhost/www

[HTTP_ACCEPT] => image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*

[HTTP_ACCEPT_ENCODING] => gzip, deflate

[HTTP_ACCEPT_LANGUAGE] => ru

[HTTP_CONNECTION] => Keep-Alive

[HTTP_HOST] => localhost

[HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)

[PATH] => \usr\local\ImageMagick;\usr\local\php5; C:\PROGRA~1\Borland\CBUILD~1\Bin; C:\PROGRA~1\Borland\CBUILD~1\Projects\Bpl; C:\WINDOWS\system32; C:\WINDOWS; C:\WINDOWS\System32\Wbem

[REMOTE_ADDR] => 127.0.0.1

[REMOTE_PORT] => 1071

[SCRIPT_FILENAME] => z:/home/localhost/www/myprimers/pr44.php

[SERVER_ADDR] => 127.0.0.1

[SERVER_ADMIN] => webmaster@localhost

[SERVER_NAME] => localhost

[SERVER_PORT] => 80

[SERVER_SIGNATURE] => <ADDRESS>Apache/1.3.33 Server at <A HREF="mailto:webmaster@localhost">localhost</A> Port 80</ADDRESS>

[SERVER_SOFTWARE] => Apache/1.3.33 (Win32) PHP/5.1.6

[SystemRoot] => C:\WINDOWS

[WINDIR] => C:\WINDOWS

[GATEWAY_INTERFACE] => CGI/1.1

[SERVER_PROTOCOL] => HTTP/1.1

[REQUEST_METHOD] => GET

[QUERY_STRING] =>

[REQUEST_URI] => /MyPrimers/pr44.php

[SCRIPT_NAME] => /MyPrimers/pr44.php

[PATH_TRANSLATED] => z:/home/localhost/www/myprimers/pr44.php

[PHP_SELF] => /MyPrimers/pr44.php

[REQUEST_TIME] => 1196893515

[argv] => Array

(

)

[argc] => 0

)

Массив $_ENV содержит переменные среды окружения, как и в С++. Другие суперглобальные переменные PHP будут описаны в дальнейшем.

Операции и выражения

Таблица Арифметические операции

Пример Результат
$a + $b Сумма $a и $b.
$a - $b Разность $a и $b.
$a * $b Произведение $a и $b.
$a / $b Частное от деления $a на $b.
$a % $b Целочисленный остаток от деления $a на $b.

Операция деления ("/") всегда возвращает число с плавающей точкой, даже если операнды являются целыми числами (или строками, которые конвертируются в целые числа).

Битовые операции

Битовые операции дают возможность устанавливать значение битов для целых чисел. Если операнды являются строками, битовая операция выполняется над символами строки.

Таблица . Битовые операции

Пример Имя Результат
$a & $b And Устанавливаются биты, которые установлены и в $a, и в $b.
$a | $b Or Устанавливаются биты, которые установлены в $a или в $b.
$a ^ $b Xor Устанавливаются биты, которые установлены в $a или $b, но не в обоих.
~ $a Not Устанавливаются биты, которые в $a не установлены, и наоборот.
$a << $b Сдвиг влево Сдвигает биты переменной $a на $b шагов влево.
$a >> $b Сдвиг вправо Сдвигает биты переменной $a на $b шагов вправо.

Операции сравнения

Таблица . Операции сравнения

Пример Название Результат
$a == $b равно TRUE, если $a равно $b.
$a === $b идентично TRUE, если $a равно $b и они одного типа.
$a != $b не равно TRUE, если $a не равно $b.
$a <> $b не равно TRUE, если $a не равно $b.
$a !== $b не идентично TRUE, если $a не равно $b или они разных типов.
$a < $b меньше TRUE, если $a строго меньше $b.
$a > $b больше TRUE, если $a строго больше $b.
$a <= $b меньше или равно TRUE, если $a меньше или равно $b.
$a >= $b больше или равно TRUE, если $a больше или равно $b.

Условной операцией является операция ?формата: (expr1) ? (expr2) : (expr3). При этом значение выражения равно expr2, если expr1=TRUE, и expr3, если expr1= FALSE.

Логические операции

Таблица . Логические операции

Пример Имя Результат
$a and $b And TRUE, если и $a, и $b TRUE.
$a or $b Or TRUE, если $a или $b TRUE.
$a xor $b Xor TRUE, если $a или $b TRUE, но не оба.
! $a Not TRUE, если $a не TRUE.
$a && $b And TRUE, если и $a, и $b TRUE.
$a || $b Or TRUE, если $a или $b TRUE.

Операции and и or выполняются также, как && и || однако они имеют более высокий приоритет, чем соответствующие операции && и ||.

В качестве false принимается 0, в качестве true не 0. Обычно операции и функции возвращают в качестве true значение 1. Рассмотрим пример:

Операции and и or выполняются также, как && и || однако они имеют более высокий приоритет, чем соответствующие операции && и ||.

В качестве false принимается 0, в качестве true не 0. Обычно операции и функции возвращают в качестве true значение 1. Рассмотрим пример:

<?php //pr7.php

$b=('2' & '9');

echo "b=", $b, "<br>";// выдаёт '0'

$b=(2 && 9);

echo "b=", $b, "<br>";// выдаёт '1'

$a=(3 | 9);

echo "a=", $a, "<br>";// выдаёт 11

$c= $a and $b;

echo "c=", $c, "<br>";//выдаёт '11'

echo "c=", $c=$a && $b,"<br>";// выдаёт '1'

echo "c=", $c=3||4, "<br>";//выдаёт '1'

echo "c=", $c=3 or 4, "<br>";//1

?>

Строковые операции

Операция “+” используется только для сложения чисел, являющихся значениями строк и не является операцией конкатенации (слияния строк). Операцией конкатенации является операции “.” И ”.=”.

<?php //pr4.php

$one = '1';

$two= "2";

echo $one, $two;

print $one+$two; // выведет - 1 2 3

echo $one.$two; // выведет - 12

$one = (int)$one; $two= (float)$two;

print $one+$two;//3

$a = "Hello ";

$a .= "World!"; // теперь $a содержит "Hello World!"

?>

Вывод:

Переменные $one и $two являются строковыми, при сложении происходит неявное преобразование их значений к числовым. Может быть использовано явное преобразование: $one = (int)$one; $two= (float)$two;

Рассмотрим операторы сравнения строк. В PHP операнды сравниваются, как строки, только в случае, если оба они - строки. В противном случае они сравниваются как числа. При этом любая строка, которую PHP не удается перевести в число, в том числе и пустая, будет восприниматься как 0. Для сравнения строк не рекоммендуется использовать операторы сравнения == и !=, поскольку они требуют преобразования типов. Пример:

<?php

$x=0;

$y=1;

if ($x == "") echo "<p>x - пустая строка</p>";

if ($y == "") echo "<p>y - пустая строка</p>";

// Выводит:

// x - пустая строка

?>

Данный скрипт сообщает нам, что $x - пустая строка. Это связано с тем, что пустая строка ("") трактуется здесь как 0. Чтобы избежать путанницы и преобразования типов, при сравнении строк рекомендуется пользоваться оператором эквивалентности. Оператор эквивалентности сравнивает величины и по значению, и по типу:

<?php

$x="string";

$y="string";

$z="Строка";

if ($x === $z) echo "<p>Строка X равна строке Z</p>";

if ($x === $y) echo "<p>Строка X равна строке Y</p>";

if ($x !== $z) echo "<p>Строка X НЕ равна строке Z</p>";

// Выводит:

// Строка X равна строке Y

// Строка X НЕ равна строке Z

?>

Операторы управления

PHP содержит все основные конструкции языка C++: условные операторы if…else (elseif), switch, четыре вида операторов цикла и др.

Оператор выбора ifимеет следующий синтаксис:

if(boolexp) { /*операторы, выполняемые при boolexp=true*/} //1

else{ /*операторы, выполняемые при boolexp=false */ } //2

Если выражение boolexp принимает значение true, то выполняется группа операторов 1, иначе – группа операторов 2. При отсутствии оператора else операторы, расположенные после окончания оператора if(строка 2), выполняются вне зависимости от значения булевского выражения оператора if. Допустимо также использование конструкции-лесенки if {} else if {}.

В следующем примере показана возможность отключения PHP, чтобы вывести без интерпретации часть html – документа.

<?php //pr8.php

$boolexp=true;

if ($boolexp) : ?> //отключение php

<img src="img/A_A.jpg" >

<?php endif; //включение php

$c=5;

echo "c=", $c=$c or 4, "<br>";//1

?>

Оператор if() при этом надо закончить оператором endif (аналогично endwhile, endfor). Создаваемый после PHP-интерпретации HTML- документ, пересылаемый браузеру, будет выглядеть следующим образом:

//отключение php

<img src="img/A_A.jpg" >

c=1<br>

Другой вариант состоит в использовании фигурных скобок вместо двоеточия:

<?php //pr81.php

$bexp=true;

if ($bexp) { ?> //отключение php

<img src="img/A_A.jpg" >

<?php } //включение php

$c=5;

echo "c=", $c=$c or 4, "<br>";//1

?>

В PHP существует четыре вида циклов, первые три из них аналогичны соответствующим циклам в языке С++:

Цикл с предусловием:

while(boolexp) { /*операторы, выполняемые при boolexp=true */ }

Цикл с постусловием:

do{ /*операторы, выполняемые при boolexp=true */ }

while(boolexp);

for(exp1; boolexp; exp3){ /*операторы*/ } // цикл с параметрами

Здесь по традиции exp1 – начальное выражение, boolexp – условие выполнения цикла, exp3 – выражение выполняемое в конце итерации цикла (как правило, это изменение начального значения). Циклы выполняются, пока булевское выражение boolexp равно true.

Eще один цикл, упрощающий доступ к массивам:

foreach($array as[$key=>] $value){ /*операторы*/ }

При проходе каждого элемента массива в переменную $key помещается индекс данного элемента, а в переменную value – значение элемента. Индекс $key может отсутствовать.

Рассмотрим пример вывода элементов массива:

<?php //pr9.php

$massiv = array('one','two','three');

foreach($massiv as $value)echo $value;//onetwothree

?>

В следующем примере имеются нарушения правил работы с массивом.

<?

$a[]=1;

$a[]=2;

$a[]=4;

$a[]=8;

foreach ($a as $i) {$s=$s+$a[$i];}

echo ($s);

?>

Ответ: $s=6

Что неправильно, как-бы игнорируется первый и последний элементы.

Аналогично C++ используется оператор выбора варианта switch:

switch(exp) {

caseexp1:{/*операторы*/}

break;

caseexpN:{/*операторы*/}

break;

default: {/*операторы*/}

}

При совпадении значения exp с одним из значений, указанным в case, выполняется соответствующий вариант и далее подряд все блоки операторов до тех пор, пока не встретится оператор break, Значения exp1,…, expN могут быть константами не только целого, но и вещественного или стрингового типа в отличие от C++.

Для выхода из циклов используются оператор прерывания цикла break и оператора прерывания итерации цикла continue.

<html>

<head></head>

<body>

<p>в прямоугольной матрице переставить столбцы в порядке возрастания суммы их элементов</p>

<?php //pr10.php

$matrix = array();

$n = 3;

$m = 5;

for($i=0;$i<$n;$i++)

for($j=0;$j<$m;$j++){

$matrix[$i][$j] = rand(0,9);

}

for($i=0;$i<$n;$i++){

for($j=0;$j<$m;$j++){

echo($matrix[$i][$j]);

echo(" ");

}

echo("<br>");

}

$sum = array();

for($j=0;$j<$m;$j++){

$sum[$j] = 0;

for($i=0;$i<$n;$i++){

$sum[$j]+=$matrix[$i][$j];

}

}

echo("<br>");

for($i=0;$i<$m;$i++){

echo($sum[$i]);

echo(" ");

}

for($i=0;$i<$m-1;$i++)

for($j=0;$j<$m-1-$i;$j++){

if($sum[$j]>$sum[$j+1]){

$temp = $sum[$j];

$sum[$j] = $sum[$j+1];

$sum[$j+1] = $temp;

for($k=0;$k<$n;$k++){

$temp = $matrix[$k][$j];

$matrix[$k][$j] = $matrix[$k][$j+1];

$matrix[$k][$j+1] = $temp;

}

}

}

echo("<br>");

echo("new matrix:");

echo("<br>");

for($i=0;$i<$n;$i++){

for($j=0;$j<$m;$j++){

echo($matrix[$i][$j]);

echo(" ");

}

echo("<br>");

}

?>

</body>

</html>

Функции

Функция может быть определена с использованием синтаксиса:

function fname ($arg_1, $arg_2, ..., $arg_n)

{

echo "Пример \n";

return $val; //возвращаемое значение

}

Необязательный оператор return возвращает значение любого типа, в том числе список и объект.

<?php //pr11.php-найти все натуральные числа, не //превосходящие m и содержащие хотя бы одну девятку в //десятичном представлении

$m=rand(10,150); //случайное значение m

print "m=$m<br>";

for($i=1;$i<$m;$i++)

{$k=f($i);

if($k!=0)print "$k<br>";

}

function f($n)

{$l=$n;

do

{

if(($l%10)==9)return $n;}

while(($l/=10)!=0);

return 0;

}

?>

Пример. Вычисление площади треугольника по формуле Герона.

<html>

<head><title>Square</title></head>

<body>

Стороны треугольника:<br>

<?php //pr12

$a=rand(1,100);

$b=rand(1,100);

$c=rand(1,100);

print "$a<br>$b<br>$c<br>";

Proverka($a,$b,$c);

function Proverka($a,$b,$c)

{if(($a+$b<=$c)||($a+$c<=$b)||($b+$c<=$a))

echo "Треугольника с указанными сторонами не существует!!!!<br>Перезагрузите страницу!<br>";

else{

echo "Всё правильно!Треугольник с указанными сторонами действительно существует!!!!<br>";

$s=Geron($a,$b,$c);

echo "Его площадь равна<br> ";

print "$s";

}

}

function Geron($a,$b,$c){

$p=($a+$b+$c)/2;

return sqrt($p*($p-$a)*($p-$b)*($p-$c));

}

?>

</body>

</html>

Несколько значений можно возвратить путём возвращения списка и функции list().

function numbers()

{

return array (0, 1, 2);

}

list ($zero, $one, $two) = numbers();

Операция ссылки & в объявлении функции и в присвоении возвращаемого значения позволяет возвратить ссылку:

function &reference()

{

return $ref;

}

$newref =&reference();

Рекурсивные функции

<?

// Написать функцию вычисления x^n

function Evaluate($x,$n)

{

if ($n==1) return $x;

else return Evaluate($x,$n-1)*$x;

}

echo("x=5; n=3; res=");

echo(Evaluate(5,3));

echo("<BR>");

echo("x=0.2; n=3; res=");

echo(Evaluate(0.2,3));

?>

Аргументы функции

Список аргументов представляет набор переменных или констант, разделённых запятыми. PHP поддерживает разбор аргументов функций по значению, разбор по ссылке и значения по умолчанию.

В PHP, как и в С++, аргументы передаются в функцию по значению. Если необходимо дать функции возможность модифицировать аргументы, передавать их надо по ссылке &:

function f(&$str)

{

$str .= 'and extra.';

}

$str = 'This is a string, ';

f($str);

echo $str;// выводит 'This is a string, and extra.'

По ссылке в функцию передается не значение переменной $str, а ее адрес. После этого изменение переменной $str в функции влечет изменение аргумента $str в вызывающей функцию программе.

Функция может определить значения по умолчанию в стиле C++ для скалярных аргументов:

function f($а = "0")

{

return $а.;

}

echo f(); // 0.

echo f("1");// 1.

При вызове такой функции без аргумента, в качестве аргумента будет взято значение по умолчанию. Значение по умолчанию обязано быть константным выражением, но не переменной. Эти значения должны находиться справа от любых значений не по умолчанию.

Область действия и время жизни переменных

Переменные, объявленные вне функций имеют глобальную область действия. Любая переменная, определенная внутри функции, ограничена локальной областью функции и уничтожается при выходе из функции. Например, такая конструкция работать не будет, т.к. переменная находится в глобальной области, а ссылка на неё находится в теле функции.

$perem = 1; /* глобальная область */

function Test ()

{

echo $perem;

}

Test ();

А такая конструкция выдаст правильный результат:

function Test ()

{

$perem = 1; /* локальная область функции */

echo $perem;

}

Test ();

Чтобы глобальная переменная была доступна внутри функции, её необходимо внутри этой функции задекларировать как глобальную переменную.

<?php //pr18.php

/* глобальная область */

$a = 2;

$b = 3;

function Sum ()

{

global $a, $b; /* декларируем переменные $a и $b как глобальные */

$c = $a + $b; /* и теперь функция имеет к ним доступ */

echo $c;//5

global $myglobal;

$myglobal=0;

}

echo ($myglobal) ;//неопределенная переменная $myglobal

Sum ();

echo $myglobal; //0

?>

В PHP имеются переменные $_GET[],$_POST[],$_REQUEST[],$_COOKIE[], $_FILES[],$_SERVER[],$_ENV[],$_SESSION[], которые называются суперглобальными и которае доступны постоянно во время выполнения сценария PHP. Для доступа к переменным глобальной области в PHP используется также специальный массив $GLOBALS.

Время жизни локальной переменной – это время работы функции, в которой объявлена переменная. Для удлинения времени жизни локальной переменной используется ее объявление статической переменной. Статическая переменная существует только в локальной области функции, но не теряет своего значения после выхода из функции. Например:

Function Count ()

{

static $counter = 0; /* декларируем переменную $counter как статическую, при обращении к функции она не будет каждый раз обнуляться */

echo $counter;

$counter++; }

Count(); //количество обращений к функции

Изменяемые (динамические) переменные

Иногда бывает удобно давать переменным изменяемые имена. Такие имена могут изменяться динамически. Например:

$a = "hi";

Изменяемая переменная берет некое значение и обрабатывает его как имя переменной. В приведенном выше примере значение hi может быть использовано как имя переменной, посредством применения двух записанных подряд знаков доллара, т.е.:

$$a="PHP"; /* фактически получается что $hi="PHP" */

print "$a ${$a}"; /* получаем на выходе: hi PHP */

print "$a $hi"; /* или так, что одно и то-же */

Внешние библиотечные функции

В этом разделе описываются некоторые из наиболее часто используемых функций для работы с массивами. Более обширный список доступен на Web-сайте PHP.net.

Функции для работы с массивами

count() – используется для подсчета числа элементов в массиве.

sort() – используется для сортировки элементов массива.

shuffle() – используется для случайного перемешивания элементов в заданном массиве.

sizeof() – функция является синонимом функции count().

array_slice($array_name,offset, length) – используется для извлечения части существующего массива. $array_name является именем разрезаемого массива, offset указывает позицию, где будет начинаться разрез, length указывает число элементов, которое будет вырезано.

array_merge($array_name1, $array_name2) – используется для объединения или слияния двух или большего количества существующих массивов.

Рассмотрим пример:

<?php //pr48

$massiv = array( 'В пятницу вечером после работы

мама свои начинает заботы',

'папа залег на диван, как медведь',

'многое должен ребенок успеть',

'много проблем сам решить, все суметь');

foreach($massiv as $value) echo $value;//Вывод

sort($massiv);//Сортировка

foreach($massiv as $key=>$value)

echo ("<li>$key=>$value</li>");//

rsort($massiv);// Сортировка в обратном порядке

for($i=0;$i<count($massiv);$i++){

echo("<br>$massiv[$i]");

}

shuffle($massiv);// Перемешивание

for($i=0;$i<count($massiv);$i++){

echo("<br>$i-$massiv[$i]");

}

$massiv1=array_slice($massiv,2,3); //вырезать три члена, начиная со второго

// и присвоить их massiv1

print_r($massiv1);

?>

Функции для работы со строками. Базовые строковые функции

Система PHP содержит большое число функций для работы со строками. Приведем некоторые из наиболее распространенных строковых функций: strlen($str) – возвращает длину строки, ltrim($str) – удаляет символы разделители типа пробела или табуляции в начале строки, rtrim($str) – удаляет символы разделители в конце строки, trim($str) - вырезает пустое пространство в начале и в конце строки. Рассмотрим пример:

<?php //str1.php

//Удаление лишних пробелов по-левому боку текста:<br />

$str=" –Текст слишними пробелами по бокам.- “;

$str=ltrim($str); //удаление пробелов слева<br />

echo "$str", strlen($str)," <br />";

$str=rtrim($str); //Удаление пробелов справа<br />

echo "$str"," <br />";

$str=" Еще Текст с пробелами по бокам ". $str=trim($str);//Удаление пробелов слева и справа <br />

echo "$str";

?>

Вывод:

-Текст с лишними пробелами по бокам.- 89

-Текст с лишними пробелами по бокам.-

Еще Текст с лишними пробелами по бокам -Текст с лишними пробелами по бокам.-

Функция strpos(string $where, string $what[,int $fromwhere =0])пытается найти в строке $where подстроку $what и в случае успеха возвращает позицию этой подстроки в строке. Необязательный параметр $fromwhere можно задавать, если поиск нужно вести не с начала строки $from, а с другой позиции. Если подстроку найти не удалось, функция возвращает false.

string substr (string $str, int $start [, int $length]) - возвращает часть строки $str, начиная с позиции $start и длиной $length. Если $length не задана, то возвращается подстрока от позиции $start до конца строки $str. Если $start больше длины строки, или же значение $length равно нулю, то возвращается пустая подстрока. Если в $start отрицательное число, то это число является индексом подстроки, отсчитываемым от конца $str.

string strstr (string $str, string $needl) - находит в строке $str первое вхождение строки $needl. Возвращает часть строки $str от первого вхождения $needle до конца. Если needl не найден, возвращает FALSE. Функция чувствительна к регистру символов. Для поиска без учёта регистра используется функция stristr(). Рассмотрим пример:

<?php //str2.php

echo strpos("Hello","el"),"<br/>"; // Выводит 1

echo strstr("Hello","el"),"<br/>";

// чтобы избежать проблем с определением типов используйте

//операторы тождественных сравнений (===) (!==)

if (strpos("Norway","rwa") !== false)

echo "Строка rwa есть в Norway","<br/>";

//Пример использования substr()

echo $rest = substr("abcdef", 1),"<br/>"; //возвращает "bcdef"

echo $rest = substr("abcdef", 0, 4),"<br/>";//возвращает "abcd"

$str = "Programmer";

echo substr($str,0,2),"<br/>"; // Выводит Pr

echo substr($str,-3,3),"<br/>"; // Выводит mer

//Пример strstr()

$email = '[email protected]';

$domain = strstr($email, '@');

print "$domain, <br/>"; // печатает @example.com

?>

Вывод:

Ello

Строка rwa есть в Norway

Bcdef

Abcd

Pr

Mer

@example.com,

Функция strcmp(string $str1, string $str2)

сравнивает две строки посимвольно и возвращает: 0, если строки совпадают; -1, если строка $str1 лексикографически меньше $str2; и 1, если, наоборот, $str1 "больше" $str2. Для функции strcmp() регистр символов влияет на результаты сравнений, для strcasecmp(string $str1, string $str2) регистр не учитывается.

Функция strspn( ) возвращает длину первого сегмента строки1, содержащего символы, присутствующие в строке2. Синтаксис функции strspn( ):

int strspn (string строка1, string строка2)

Следующий фрагмент показывает, как функция strspn( ) используется для проверки пароля. Здесь же сравниваются две одинаковые строки:

<? //Str13.php

$string1 = "butter";

$string2 = "Butter";

if ((strcmp($string1, $string2)) == 0)

print "Strings are equivalent!";

else

print "Strings are not equivalent!";

if ((strcasecmp($string1, $string2)) == 0)

print "Строки совпадают с точностью до регистра!";

$password = "12345";

if (strspn($password, "1234567890") ==strlen($password))

print "Password cannot consist solely of numbers!";

?>

Вывод:

Strings are not equivalent!

Строки совпадают с точностью до регистра!

Password cannot consist solely of numbers!

Функция strcspn( ) возвращает длину первого сегмента строки1, содержащего символы, отсутствующие в строке2. Синтаксис функции:

int strcspn (string строка1, string строка2);

str_replace(string $from, string $to, string $str)

Заменяет в строке $str все вхождения подстроки $from (с учетом регистра) на $to и возвращает результат. Исходная строка, переданная третьим параметром, при этом не меняется. Например, вот так мы можем заместить все символы перевода строки на их HTML эквивалент — тэг <br>:

$st=str_replace("\n","<br>\n",$str)

То, что в строке <br>\n тоже есть символ перевода строки, никак не влияет на работу функции, т. е. функция производит лишь однократный проход по строке.

string WordWrap(string $str, int $width=75, string $break="\n")

Функция разбивает блок текста $str на несколько строк, завершаемых символами $break, так, чтобы на одной строке было не более $width букв. Разбиение происходит по границе слова. Возвращается получившаяся строка с символами перевода строки, заданными в $break. Функция, оказывается полезной, например, при форматировании текста письма перед автоматической отправкой его адресату при помощи mail(). Пример использования:

<?php //str3.php

$str = "Это текст электронного письма, которое нужно отправить адресату ";

// Разбиваем текст по 20 символов

$str = WordWrap ($str, 30, "<br>");

echo $str;

?>

Вывод: Это текст электронного письма,

которое нужно отправить

адресату

string stripcslashes (string str) - возвращает строку с вырезанными обратными слэшами. Распознаёт C-подобные \n, \r.

strip_tags (string $str [, string $allowable_tags])

Эта функция удаляет из строки все тэги и возвращает результат. В параметре $allowable_tags перечисляться вплотную друг к другу тэги, которые не следует удалять из строки. Примеры:

<? //str4.php

$str="<b>жирный текст</b>";

echo "$str,<br/>";

$str=strip_tags($str);

echo "НЕ $str<br/>";

//Удаление всех тэгов, кроме <b> и <i>:

$str="<h1>большой текст</h1> <b><i>жирный текст</i></b>";

echo "$str <br/>";

$str=strip_tags($str,"<b><i>");

echo "$str,<br/>";

$strip = strip_tags ($str); // Удаляет все - теги из строки

echo "$strip<br/>";

?>

Вывод:

жирный текст,
НЕ жирный текст

Большой текст

жирный текст
большой текст жирный текст,
большой текст жирный текст

Функции для работы с отдельными символами

Функция int ord ($str) - возвращает ASCII-значение первого символа строки $str, функция chr(код) возвращает символ с ASCII кодом:

<?php // Пример str5.php

$str = "PHP";

echo $str[0]; // Выводит 'P'

$str="\n это строка";

if (ord($str) == 10)

print "The first character of \$str is a line feed.\n";

$str=chr(64); //# @

echo $str;

?>

Будет выведено: The first character of $str is a line feed. @

Обратиться к любому символу строки можно также по его индексу.

Следующие функции предназначены для быстрого URL-кодирования и декодирования при передаче данных через интернет.

UrlEncode(string $str)

Функция URL-кодирует строку $str и возвращает результат. Например:

echo "<a href=/script.php?param=".UrlEncode($UserData);

UrlDecode(string $st)

Производит URL-декодирование строки. В принципе, используется значительно реже, чем UrlEncode(), потому что PHP и так умеет перекодировать входные данные автоматически.

HtmlSpecialChars(string $str)

Это функция, которая обычно используется в комбинации с echo. Основное ее назначение - гарантировать, что в выводимой строке ни один участок не будет воспринят как тэг.

Заменяет в строке некоторые символы (такие как амперсант, кавычки и знаки "больше" и "меньше") на их HTML-эквиваленты, так, чтобы они выглядели на странице "самими собой". Самое типичное применение этой функции — формирование параметра value в различных элементах формы, чтобы не было никаких проблем с кавычками, или же вывод сообщения в гостевой книге, если вставлять тэги пользователю запрещено.

StripSlashes(string $str)

Заменяет в строке $str некоторые предваренные слэшем символы на их однокодовые эквиваленты. Это относится к следующим символам: ", ', \ и никаким другим.

AddSlashes(string $str)

Вставляет слэши только перед следующими символами: ', " и \. Функцию очень удобно использовать при вызове eval() (эта функция выполняет строку, переданную ей в параметрах, так, как будто имеет дело с небольшой PHP-программой.

Функция strpbrk(string, char) – ищет в строке символ char и возвращает false или строку, начинающуюся с найденного символа; strtoupper(string) – преобразует строку в верхний регистр; strtolower(string) – преобразует строку в нижний регистр; strrev(string) – возвращает строку string в обратном порядке. Следующий блок кода демонстрирует, как использовать строковые функции PHP.

<?php//str6.php

$string = "Hello World";

$another_string = "Welcome to PHP";

echo strlen($string);

echo strtoupper($another_string);

echo strrev($another_string);

echo strpbrk($string, "W");

?>

Вывод:

WELCOME TO PHP

PHP ot emocleW

World

Первая строка выводит длину строки "Hello World", равную 11. Затем строка "Welcome to PHP" преобразуется в верхний регистр и выводится. Эта строка используется также с функцией strrev для изменения порядка символов строки на обратный. Наконец, функция strpbrk () производит поиск символа "W". Так как первое появление символа происходит в тексте "World", выводится эта строка.

Функции форматных преобразований строк

Язык PHP поддерживает ряд функций вывода, использующих такой же синтаксис, как и их Си -эквиваленты.

string sprintf (string $format [, mixed args]) –

возвращает строку, созданную из аргументов в соответствии со строкой форматирования $format. Строка $format может включать в себя команды форматирования, предваренные символом %. Все остальные символы копируются в выходную строку. Каждый спецификатор формата соответствует одному параметру, указанному после параметра $format.

<? // Пример str7.php Использование sprintf()

$num=5;

$location="tree";

$format = "There are %d monkeys in the %s";

printf($format,$num,$location); // выведет: "There are 5 //monkeys in the tree".

//sprintf(): целые числа с заполнением нулями

$year=3;

$month=10;

$day=11;

$dat = sprintf(" %03d-%03d-%02d ", $year, $month, $day);

echo $dat;

//sprintf(): форматирование валюты

$money1 = 68.75;

$money2 = 54.35;

$money = $money1 + $money2;

echo $money;// will output "123.1";

$formatted = sprintf(" %01.2f", $money);

echo $formatted; //выдаст "123.10"

?>

Вывод:

There are 5 monkeys in the tree 003-010-11 123.1 123.10

Функция printf(string $format [, mixed args, ...]) делает то же самое, что и sprintf(), только результирующая строка не возвращается, а направляется в браузер пользователя.

В PHP существует еще несколько функций для выполнения форматных преобразований, среди них - sscanf() и fscanf(), которые часто применяются в Си.

mixed sscanf (string str, string format [, string var1]) - это input-аналог printf(). sscanf() читает из строки str и интерпретирует её в соответствии с форматом format. Любой пробел в строке формата совпадает с любым пробелом в строке ввода.

<? // str8.php Использование sscanf()

$serial = sscanf("SN/23501","SN/%s",&$ser);

// получение серийного номера и даты изготовления

echo $serial,"<br>";

$mandate = "January 01 2011";

list($month, $day, $year) = sscanf($mandate,"%s %d %d");

echo "Item $ser was manufactured on: $year-" .substr($month,0,3)."-$day\n";

// функция возвращает количество присвоенных значений.

?>

Вывод:

Item 23501 was manufactured on: 2011-Jan-1

Использование форматных функций в Веб – приложениях ограничено из-за низкой скорости: для разбора строк оказывается выгоднее привлечь регулярные выражения или функцию explode().

Функция array explode (string разделитель, string $str [, int n]) делит строку на элементы и возвращает эти элементы в виде массива. Разбиение $str происходит по разделителям, количество фрагментов может ограничиваться необязательным параметром n.

Ее двойник - функция string implode (string разделитель, array фрагменты) - объединяет массив в строку. Формирование массива из строки и строки из массива продемонстрировано в следующем примере:

<? // str9.php

$info = "Minsk | baseball | indians";

$user = explode("|", $info);

//$user[0]="Minsk";$user[1]="baseball";$user[2]="Indians";

print_r($user);

$cities=array("Colum","Youngstown","Cleveland","Cincinnati");

$city_string = implode("l", $cities);

//$city_string="Colum1Youngstown1Cleveland1Cincinnati";

echo "<br>",$city_string;

?>

Вывод:

Array ( [0] => Minsk [1] => baseball [2] => indians )

ColumlYoungstownlClevelandlCincinnati

Функция string strtok (string $arg1, string $token) – выполняет лексемизацию строки, в результате которой строка arg1делится на слова (лексемы/tokens), где каждое слово отделено символом из $token. В примере строка "This is an example string", лексемизируeтся на отдельные слова с применением пробела как разделителя.

<? // str10.php

$string = "This is\tan example\nstring";

/* Использовать символы tab и newline как лексемизирующие символы */

$tok = strtok($string," \n\t");

while ($tok) {

echo "Word=$tok<br>";

Наши рекомендации