Задания на лабораторную работу
Лабораторная работа № 4
Стандартные функции обработки данных
Цель работы: | - изучить приемы работы с функциями рнр. |
Математические функции
В веб-программировании сложные вычисления используются гораздо реже, чем в других языках.
Случайные числа:
int mt_rand (int $min=0, int $max);
Функция mt_rand возвращает случайное целое число от $min до $max включительно. Если функции передавать только одну переменную, то диапазон будет от 0 до $max.
Пример:
mt_rand (1, 500); // результатом будет число от 1 до 500.
Функция получения модуля числа:
mixed abs (mixed $number);
Возвращает модуль числа, входящие данные могут быть типов int и float.
Пример:
abs(-101); // результатом будет число 101.
Функция округление числа до ближайшего целого:
float round (float $number);
Пример:
round(101.2); // результат 101
round(101.5); // результат 102
round(101.7); // результат 102
Функция округления только в большую сторону:
int ceil (float $number);
Пример:
ceil(26); // результат 26
ceil(26.01); // результат 27
Функция округления только в меньшую сторону:
int floor (float $number);
Пример:
floor(33.02); // результат 33
floor(33.97); // результат 33
Функция перевода в различные системы счисления:
string base_convert (string $number, int $from, int $to);
Переводит число $number из системы счисления $from в $to.
Пример.
base_convert (255, 10, 16); // результат FF
Функция поиска минимума и максимума:
mixed min (mixed $arg1, mixed $arg2 … mixed $argN);
mixed max (mixed $arg1, mixed $arg2 … mixed $argN);
Функции возвращают минимальное / максимальное значение среди передаваемых значений, передаваться могут и массивы (в массивах сравниваются значения, ключи игнорируются).
Пример:
min (101, 5142.22, array(27, 150, 101), '1000'); // результат 27.
Функция возведения в степень:
float pow (float $number, float $exp);
Возводит число $number в степень $exp.
Пример:
pow (144, 0.5); // результат 12.
Строковые функции
Функция поиска позиции искомой подстроки:
int strpos (string $where, string $what, $from=0);
Подстрока $what ищется в строке $where и возвращает целое число – порядковый номер символа, с которого начинается искомая подстрока (может принимать значение 0, если строка начинается с искомой подстроки) и false когда подстрока не найдена. Поиск идет до первого совпадения. Функция регистрозависима. Необязательный параметр $from указывает, с какой позиции необходимо начать поиск. Функция strrpos ведет себя также, только ищет не первое совпадение, а последнее.
Пример:
strpos ('Ничего на свете лучше нету...', 'ичего'); // Результат 1
Функция удаления пробелов (тримирование):
string trim (string $text [, string $symbols]);
Функция удаляет все пробельные символы с начала строки до первого непробельного символа, и с последнего непробельного символа до конца строки (т.е. слева и справа). Если задана переменная $symbols, тогда удаляются на концах все символы, встречающиеся в строке $symbols.
Функции ltrim и rtrim удаляют пробельные символы только слева и справа соответственно.
Пример:
trim (' 115 '); // результат '115'
Функция определения длины строки:
int strlen (string $text);
Возвращает число символов из которых состоит строка. Некорректно работает с текстом в кодировках Unicode.
Пример:
strlen('Шишки и два метра лиха'); // результат 22
Функция обрезания строки:
string substr (string $text, int $from [, int $length]);
Функция возвращает подстроку из строки $text, начиная с символа $from. Если задан необязательный параметр $length, тогда возвращается подстрока длиной $length. Некорректно работает в кодировке Юникод.
Пример:
substr('Как много в небе самолетов', 10, 10); // результат "в небе сам"
Функция замены:
mixed str_replace (string $from, string $to, mixed $text);
Очень часто используемая функция. Заменяет в строке $text (также это может быть массив, в котором заменяются все его значения) подстроку $from на подстроку $to и возвращает результат. Изначальную переменную $text функция не меняет. Функция str_ireplace работает также, как и str_replace, но она регистронезависимая.
Пример:
str_ireplace('сильнее', 'слабее', 'Добро сильнее зла'); // Результат "Добро слабее зла"
string substr_replace (string $text, string $to, int $from [, int $length]);
Заменяет в строке $text отрезок текста в промежутке с $from символа (длиной $length символов) на подстроку $to. Некорректно работает с Юникодом.
Пример:
substr_replace('5 баянов', "7 больших", 0, 1); // результат "7 больших баянов"
Функция преобразования:
string htmlspecialchars(string $string [, int $quote_style [, string $charset]]);
Преобразует специальные символы в HTML сущности. Эта функция полезна при отображении данных, введенных пользователем, которые могут содержать нежелательные HTML тэги, например, в форуме или гостевой книге. Необязательный второй аргумент quote_style определяет режим обработки одиночных и двойных кавычек. В режиме по умолчанию, ENT_COMPAT, преобразуются двойные кавычки, одиночные остаются без изменений. В режиме ENT_QUOTES преобразуются и двойные, и одиночные кавычки. а в режиме ENT_NOQUOTES и двойные, и одиночные кавычки остаются без изменений.
Производятся следующие преобразования:
- & (амперсанд) преобразуется в '&'
- " (двойная кавычка) преобразуется в '"' when ENT_NOQUOTES is not set.
- ' (одиночная кавычка) преобразуется в ''' только в режиме ENT_QUOTES.
- < (знак "меньше чем") преобразуется в '<'
- > (знак "больше чем") преобразуется в '>'
Пример:
htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
// результат в коде «<a href='test'>Test</a>», результат в браузере «<a href='test'>Test</a>».
string addslashes ( string $str );
Экранирует спецсимволы в строке. Возвращает сроку str, в которой перед каждым спецсимволом добавлен обратный слэш (\), например, для последующего использования этой строки в запросе к базе данных. Экранируются одиночная кавычка ('), дойная кавычка ("), обратный слэш (\) и NUL (байт NULL).
Пример:
addslashes("Знак ' - апостроф?"); // результат «Знак \' - апостроф?»
string strtolower ( string $str );
Преобразует строку в нижний регистр (strtoupper в верхний).
Пример:
strtolower('InTeRnEt'); // результат internet
Работа с массивами.
В PHP предусмотрено довольно много встроенных функций для работы с массивами, благодаря которым можно гибко вносить, обрабатывать, изменять и извлекать данные из списков и ассоциативных массивов.
Слияние массивов:
array array_merge ( array $array1, array $array2 [, array $...] );
Функция array_merge() сливает элементы двух или большего количества массивов таким образом, что значения одного массива присоединяются к значениям предыдущего. Результатом работы функции является новый массив.
Если входные массивы имеют одинаковые строковые ключи, тогда каждое значение, найденное позднее, будет заменять ранее найденное значение. Однако, если массивы имеют одинаковые числовые ключи, значение, упомянутое последним, не заменит исходное значение, а будет добавлено в конец массива.
Пример:
$array1 = array ("color" => "red", 2, 4);
$array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge ($array1, $array2);
Результат:
array( "color" => green, "0" => 2, "1" => 4, "2" => a, "3" => b, "shape" => trapezoid, "4" => 4)
Размер массива:
int count ( mixed $var [, int $mode] );
Подсчитывает количество элементов массива или количество свойств объекта. Если дополнительный параметр mode установлен в COUNT_RECURSIVE (или 1), count() будет считать количество элементов массива рекурсивно. Это особенно полезно для подсчёта всех элементов многомерных массивов. Предустановленное значение параметра mode - 0.
Пример:
$food = array('fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard', 'pea'));
// рекурсивный count
echo count($food, COUNT_RECURSIVE); // результат 8
// обычный count
echo count($food); // результат 2
Выбрать все ключи массива:
array array_keys ( array $input [, mixed $ search_value ] )
Функция array_keys() возвращает числовые и строковые ключи, содержащиеся в массиве $input, возвращает в виде списка. Функция array_values работает по тому же принципу, только возвращает список значений, так можно превратить ассоциативный массив в список.
Если указан необязательный параметр search_value, функция возвращает только ключи, совпадающие с этим параметром. В обратном случае, функция возвращает все ключи массива input.
Пример:
array_keys (array (0 => 100, "color" => "red"));
Результат:
Array('0' => 0, '1' => color);
Поиск значения в массиве:
bool in_array ( mixed $needle, array $haystack [, bool $strict] );
Ищет в $haystack значение $needle и возвращает TRUE в случае удачи, FALSE в противном случае.
Если третий параметр $strict установлен в TRUE тогда функция in_array() также проверит соответствие types параметра $needle и соответствующего значения массива haystack.
Пример использования рекурсивной функции для суммирования последовательных целых чисел:
<?php
function summation ($count) {
if ($count != 0) :
return $count + summation($count-1);
endif;
}
$sum = summation(10);
print "Summation = $sum";
?>
В результате выполнения будет выведен следующий результат: Summation = 55
Вопросы для самопроверки
1. Что такое функция?
2. Назовите математические функции и дайте их описание?
3. Определите функции округления?
4. Назовите функции работы со строками?
Задания на лабораторную работу
1. Создайте двумерный массив из оценок в Вашей зачетке за экзамены и курсовые проекты. Пример заполнения массива (за три семестра по 5, 8, 4 оценки за семестр по порядку):
array ( array(5,3,4,4,4), array(3,5,5,5,5,5,5,4), array(4,5,5,5) );
Пример получения второй оценки за третий семестр:
$array[2][1];
2. Найдите среднюю оценку, используя конструкцию foreach. Округлите средний балл до целого числа.
3. Напишите функцию, которая в зависимости от округленной оценки выводит на экран: Отлично, Хорошо, Удовлетворительно, Этого не может быть.
4. Составьте облако 50 самых популярных слов какого-либо текста объемом более 30 000 слов (наподобие облака тегов). В качестве текста можно взять любую оцифрованную книгу или сборник рассказов одного автора, тексты выдает преподаватель, либо ищут сами студенты (по желанию). Выполнение скрипта необходимо проводить в несколько этапов:
· Составьте первоначальное облако тегов, просто собрав в ассоциативный массив пары ключ=>значение, где ключом будет само уникальное слово, а значение – сколько раз оно совпало в тексте. Из всех значений массива скрипт должен найти 50 самых часто встречающихся и вывести их на экран, выделив большим размером шрифта те слова, которые встречаются чаще остальных. В результате такого подсчета будут учитываться предлоги и союзы (так называемые стоп-слова), а также не будут учтены слова, употребленные в разных склонениях.
· Вторым этапом составьте облако тегов, фильтруя стоп-слова (их вообще можно не вносить в ассоциативный массив). Посмотрите на результат.
· Заключительным этапом составьте облако тегов на основе «корней» слов (для этого надо отсекать у слов окончания и суффиксы, можно написать свою функцию, либо скачать уже готовую из Интернета). Для удобства теперь надо будет использовать два массива. У обоих ключами будут корни слов, но у одного значениями будет число совпадений, а у другого полное название слова (желательно в именительном падеже, единственном числе, однако допустимо взять просто первое попавшееся полное слово).
Можно использовать иной алгоритм решения задачи, главное, чтобы при подсчете числа совпадений слов отбрасывались окончания и производилась фильтрация на стоп-слова.