«…Труд избавляет человека от трех великих зол: скуки, порока, нужды…»

СУБД/лекция 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 - это вызовет ошибку, да и замена одного фрагмента строки массивом не имеет смысла.

Примеры использования str_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
?>