СУБД/лекция 7 семестр 2 (раздел)/Строковые функции PHP
Материал из Wiki
Содержание |
chop
Функция chop() является псевдонимом функции rtrim(). Она удаляет правый пробел в строке. Людям, знающим язык Perl, надо помнить, что в PHP chop действует иначе, в Perl одноименная функция удаляет любой последний символ строки, а не только пробел.
chr
Функция chr возвращает символ по его ASCII коду.
Описание:
string chr ( int ascii )
Возвращает строку из одного символа, код которого задан аргументом ascii. ASCII - American Standard Code for Information Interchange - Стандартный американский код обмена информацией. Это код для представления символов английского алфавита в виде чисел, каждой букве сопоставлено число от 0 до 127. Стандартный набор символов ASCII использует только 7 битов для каждого символа. Есть несколько наборов символов, которые используют 8 бит, что дает дополнительно 128 символов. Дополнительные символы используются для отображения символов не-английского алфавита, графических и математических символов и нашего, русского алфавита. Русскому алфавиту соответствуют коды от 192 до 255.
Пример использования chr()
<?php echo chr (204); // выведет М ?>
Таблицу ASCII-кодов вы можете найти здесь: http://www.asciitable.com или получить самостоятельно с помощью той-же самой функции chr. Для этого можно в цикле пропустить числа от 0 до 255 пропустить через chr. Вот самый примитивный вариант, конечно, если хотите, можете усложнить его, превратив в нормально оформленную таблицу.
<?php $i=0; while ($i<256) { echo '<b>'.$i.'</b> - '.chr($i).'<br/><br/>'; $i++; } ?>
Кроме функции chr есть по сути обратная ей функция ord() - она возвращает ASCII код символа.
echo
Echo – одна из основных и важнейших для практического использования функций языка php. Нужно сразу оговорится – на самом деле echo не функция – а конструкция языка. Поэтому, ее аргументы совершенно не обязательно заключать в скобки, как у обычных функций.
Echo выводит информацию в браузер, на экран.
С помощью echo можно выводить текст
<?php echo "Привет мир!"; ?>
и содержимое переменных
<?php $var=”Привет!”; echo $var; // выведет Привет! ?>
И несколько переменных
<?php $n1=12; $n2=77; echo $n1,$n2; // выведет 1277 ?>
Если мы выводим только переменные, то никакие кавычки нам не нужны. Другое дело, если нам нужно вывести текст. Существует несколько способов вывода текста с помощью echo. Если мы заключим всю строку в двойные кавычки, то php будет искать в ней переменные и выводить уже их значения.
<?php $name=”Вася Пупкин”; echo “Вы указали имя $name, вы в этом уверены?”; // Выведет: Вы указали имя Вася Пупкин, вы в этом уверены? ?>
Если вся строка будет заключена в одинарные кавычки, вывод будет происходить «как есть» и на экране появятся имена, а не значения переменных.
<?php echo ‘Вы указали имя $name, вы в этом уверены?’; // Выведет: Вы указали имя $name, вы в этом уверены? ?>
Еще один путь – соединять строки и переменные конкатенацией, которая в php осуществляется с помощью знака точки.
<?php echo ‘Вы указали имя’.$name.’, вы в этом уверены?’; // Выведет: Вы указали имя Вася Пупкин, вы в этом уверены? ?>
Таким образом, выводимая строка собирается из несколькихфрагментов – двух текстовых частей, которые выводятся прямо, без поиска в них переменных, и переменной name, значение которой объединяется со строками.
Каким стилем пользоваться – заключать все в двойные кавычки или соединять текст с переменными конкатенацией – дело вкуса. В учебниках, как правило, применяется первый вариант синтаксиса. Мне лично больше нравится второй путь - конкатенация – по двум причинам. Во-первых, при таком написании переменные значительно лучше видны в коде при использовании редакторов с подсветкой php, читаемость кода значительно выше, во-вторых, такой код работает чуть быстрее, так как php не ищет переменные в больших текстовых блоках, а просто выводит их на экран.
Для функции echo существует сокращенный вариант. Если у вас включена директива конфигурации short_open_tag, то вы можете написать так:
Вы указали имя <?=$name?> , вы в этом уверены?
Впрочем, это весьма экзотический и на мой взгляд, совершенно неудобный вариант.
Выводя строки с помощью echo не забывайте экранировать кавычки, двойные – если вы выводите все в двойных кавычках и одинарные, если, соответственно, в одинарных.
<?php echo "Фирма "Пупкин и Ко" открылась!"; ?>
explode
Функция explode - одна из важнейших функций PHP. Она очень удобна, например, если вам нужно хранить в базе данных строку "родительских" id для какой-либо страницы, а потом распаковывать ее, превращая в отдельные номера-id. В таком случае перед записью в базу массив айдишников объединяется в строку с помощью функции implode, а при необходимости снова превращается в массив при помощи explode.
Синтаксис функции не сложен:
array explode ( string separator, string string [, int limit] )
Аргумент separator делит строку string. Если в строке нет этого сепаратора, то функция поместит всю строку в один элемент массива. Если сеператор вообще пустая строка (""), то функция explode вернет FALSE. Не путайте пустой сепаратор с пробелом (" "), пробел для функции ничем не отличается по сути от запятой или точки.
Если передан аргумент LIMIT (он появляется начиная с версии PHP 4.0.1), массив будет содержать максимум LIMIT элементов, при этом последний элемент будет содержать остаток строки string.
<?php $parents = "12,5,3"; $parentsm = explode(",", $parents); echo $parentsm[0]; // 12 echo $parentsm[1]; // 5 echo $parentsm[2]; // 3 ?>
Местоположение аргументов separator и string в функции explode строго определено - separator всегда расположен впереди.
Хотя эта функция создает массив, но создает его из строки, поэтому ее принято считать "строковой" функцией.
implode
Функция implode - объединяет элементы массива в строку. Она обратна функции explode и очень важна при разработке php-программ. Объединенный в строку массив можно с легкостью записывать в базу данных или передавать между скриптами, например методом POST.
Синтаксис функции:
string implode ( string glue, array pieces )
<?php $array = array('3', '5', '12'); $str = implode(",", $array); echo $str; // выводит 3,5,12 ?>
В отличие от explode, где аргумент-разделитель обязательно должен стоять перед строкой, аргумент склейки в implode может быть и до, и после склеиваемого массива. Но разработчики рекомендуют использовать единый порядок, как в explode, чтобы не путаться.
md5
Функция md5 возвращает MD5 хэш строки
Описание:
string md5 ( string str [, bool raw_output] )
В основе работы функции md5 алгоритм MD5 RSA DATA Security, Inc. Хэш представляет собой 32-значное шестнадцатеричное число. Хэш каждой строки уникален, вероятность совпадения его у разных строк ничтожно мала.
<?php $str = '12345abc'; echo md5($str); // выводит 185aef3b1c810799a6be8314abf6512c ?>
Хэширование - это вовсе не шифрование. Шифрование предполагает некий ключ, с помощью которого шифр можно перевести в читаемый текст. У хэширования такого ключа нет. Можно сказать, что это шифрование "в одну сторону", без возможности дешифровки.
Функцию md5 очень удобно использовать для хранения паролей в базе сайта. Когда пользователь вводит свой пароль, его тоже пропускают через md5 и сравнивают с лежащим в базе хэшем - если строки совпали, значит пользователь ввел именно тот пароль, что лежит в базе. Подробнее о необходимости хранить пароли в хэшированном виде читайте тут.
Второе применение функции md5 - создания хэша для отслеживания каких-либо изменений. Если вы знаете, что какая-то величина может измениться, но не знаете, как именно, то можно сделать хэш с нее и потом сравнивать с хэшем нового значения. Если они совпадают, то ваш параметр остался прежним - если нет - произошло некое изменение.
В PHP 5.0.0 в функцию md5 был добавлен необязательный аргумент raw_output, по умолчанию он равен FALSE. Если необязательный аргумент raw_output имеет значение TRUE, то возвращается бинарная строка из 16 символов.
ord
Функция ord возвращает ASCII код символа
Описание:
int ord ( string string )
Возвращает ASCII код первого символа строки string. ASCII - American Standard Code for Information Interchange - Стандартный американский код обмена информацией. Это код для представления символов английского алфавита в виде чисел, каждой букве сопоставлено число от 0 до 127. Стандартный набор символов ASCII использует только 7 битов для каждого символа. Есть несколько наборов символов, которые используют 8 бит, что дает дополнительно 128 символов. Дополнительные символы используются для отображения математических символов, символов не-английского алфавита и нашего, русского алфавита в том числе. Русскому алфавиту соответствуют коды от 192 до 255.
<?php $str = "мой сайт"; echo ord($str); // выведет 236 - код строчной буквы м ?>
Если вы хотите получить коды всех знаков в строке, то надо измерить ее длины и по очереди обращаться к каждому знаку строки с функцией ord.
<?php // строка для примера $str = "мой сайт"; // длина строки $dlina= strlen ($str); // в цикле преобразуем каждый исмвол в ASCII код $i=0; while ($i<$dlina) { echo ord ($str{$i}).'<br/>'; $i++; } ?>
Для получения символа по ASCII коду используется функция chr().
strlen
Функция strlen возвращает длину строки. Это очень простая, но важная и часто применяемая функция PHP.
Синтаксис ее следующий:
int strlen ( string string )
Она считает число символов в строке - включая символы пробела.
<?php $str = 'abcdef'; echo strlen($str); // 6 $str = ' ab cd '; echo strlen($str); // 7 $str = 12; echo strlen($str); // 2 ?>
Нужно помнить, что символы переноса строки и считаются за один или два знака соответственно. Но это практически не важно при реальном использовании функции strlen
<?php $str ='ffffff'; $str1 ="ffffff"; echo strlen($str); // 8 echo strlen($str1); // 7 ?>
Одно из самых распространенных применений strlen - проверка размера полученного от пользователя текста. Рассчитывать на встроенные в формы параметры maxlenth не стоит, пользователь может с легкостью их обойти, поэтому при получениии от него текстовых данных их нужно проверять с помощью strlen.
strpos
Функция strpos возвращает позицию первого вхождения подстроки. С ее помощью можно искать какой-либо фрагмент строки или проверять его наличие в строке.
<?php $string = 'abc'; $find1 = 'a'; $find2 = 'b'; $pos1 = strpos($string, $find1); // выведет 0 - буква а в нулевой позиции $pos2 = strpos($string, $find2); // выведет 1 - буква b в первой позиции ?>
Очень часто функция strpos используется для определения, есть ли вообще искомая строка в тексте. Здесь нужно помнить одну тонкость. Элементы строк, как и элементы массивов, нумеруются начиная с нуля. Если искомый фрагмент не найден, функция strpos вернет FALSE. А если он найден в самом начале строки в первой (то есть нулевой позиции) то strpos вернет 0. Чтобы различить эти ситуации, нужно использовать не обычное равенство == а тождественное ===, способное различать типы данных.
<?php $string="abcdef"; $find="a"; // не правильный вариант с == if (strpos ($string, $find) == FALSE) { echo 'no'; } else { echo 'yes'; } // не смотря на то, что a есть в строке abcdef, вы увидите на экране no. // правильный вариант с === if (strpos ($string, $find) === FALSE) { echo 'no'; } else { echo 'yes'; } // теперь вы получите yes ?>
И не забывайте о строгом порядке аргументов - сначала строка в которой ищем, затем - что ищем.
Кроме того, функции strpos можно указать, с какого символа начинать поиск. В следующем примере функция пропускает три первых символа (0, 1, 2) и ищет указанную букву в оставшейся части строки. Но номер выводит все равно считая от начала.
<?php // Ищем, начиная с третьего символа $string = 'abcdefabcdef'; $pos = strpos($newstring, 'b', 2); // $pos = 7 ?>
str_replace
Функция str_replace заменяет строку поиска на строку замены
Описание: mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count] )
Эта функция возвращает строку или массив subject, в котором все вхождения search заменены на replace. Если не нужны сложные правила поиска/замены, использовать функцию str_replace предпочтительнее чем ereg_replace() или preg_replace(), так как она работает значительно быстрее и меньше нагружает сервер, чем функции, основанные на регулярных выражениях.
С версии PHP 4.0.5, любой аргумент str_replace() может быть массивом.
Если subject - массив, поиск и замена производится в каждом элементе этого массива, и возвращается также массив.
Если и search, и replace - массивы, то str_replace() использует все значения массива search и соответствующие значения массива replace для поиска и замены в строке. Если в массиве replace меньше элементов, чем в search, в качестве строки замены для оставшихся значений будет использована пустая строка. Если search - массив, а replace - строка, то replace будет использована как строка замены для каждого элемента массива search.
Единственное, чего нельзя делать - заменять строку search массивом replace - это вызовет ошибку, да и замена одного фрагмента строки массивом не имеет смысла.
<?php $tag = str_replace("%body%", "black", "<body text='%body%'>"); // получится <body text='black'> $str = str_replace("4", "", "1 2 3 4 5 4 3 2 1"); echo $str; // выведет 1 2 3 5 3 2 1 $str = "1 2 3 4 5 6"; $search = array("1", "2", "3"); $replace = array("4", "5", "6"); $newstr = str_replace($search, $replace, $str); echo $newstr; // выведет 4 5 6 4 5 6 ?>
Начиная с PHP 5.0.0 количество произведенных замен может быть получено в необязательном аргументе count. Это очень удобно, если вы хотите знать, сколько раз произошла замена.
<?php $str = str_replace("4", "", "1 2 3 4 5 4 3 2 1", $count); echo $count; //выведет 2 ?>