В избранное    Домой   

Четверг,  18 Apr 2024 г., 10:39
Сказал я в сердце своем:"дай, испытаю я тебя веселием, и насладись добром"; но и это -- суета!  О смехе сказал я: "глупость!", а о веселии: "что оно делает?" /Екклесиаст/

 Логин:  

 Пароль: 




Анонсы:
=== Дата: 18/07/2011     Автор: Крис Ньюман ===

PHP. Урок 6 Обработка строк

Урок 6. Обработка строк

В этом уроке вы узнаете о мощных функциях для обработки строк, которые есть в языке PHP.

Анатомия строки

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

Два выражения ниже идентичны. Оба создают переменную $phrase, которая содержит строку справа:

$phrase = "Пусть всегда будет мир!";
$phrase = ‘Пусть всегда будет мир!’;

Символы кавычек. В PHP кавычки не указывают направления. Один и тот же символ указывает на начало и завершение строки. Для строк нельзя использовать символ апострофа (`). Вместо этого используется одинарная кавычка (').

Выделение специальных символов обратной косой чертой

В одиночных кавычках можно использовать двойные, и наоборот. Например, две строки ниже – корректные:

$phrase = " 'Привет', - сказал Вася. ";
$phrase = ' "Хорошо ", - сказал я. ';

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

$phrase = ' \'Привет\', - сказал Вася. ';
$phrase = " \"Хорошо \", - сказал я. ";

Если в примерах выше не выделить кавычку обратной косой чертой, PHP обнаружит несоответствие кавычек и выдаст ошибку.

Какой стиль кавычек использовать, зависит от личных предпочтений и сказывается на аккуратности кода. Но, как показано в уроке 2, “Переменные”, в строках, заключенных в двойные кавычки, заменяются знак доллара и имя переменной на соответствующее значение, а в одиночных кавычках такая структура трактуется как обычный текст. Для того чтобы вывести знак доллара в строке, заключенной в двойные кавычки, достаточно поставить перед ним обратную косую черту. Например, две строки ниже полностью эквивалентны:

$offer = ‘Сэкономьте $10 на первом заказе’;
$offer = "Сэкономьте \$10 на первом заказе";

Если не выделить обратной косой чертой символ доллара во второй строке, PHP попытается найти переменную $10, которая к тому же имеет некорректное имя.

Чтобы вставить общие непечатные ASCII-символы, используются стандартные комбинации символов с обратной косой чертой. Символ новой строки это \n, табуляция - \t и т.п. Получить полный список можно с помощью команды man ascii (на Unix-подобной системе) или на сайте – www.ascii.cl.

Конкатенация

Выше показано, как с помощью оператора конкатенации (точки) можно объединять строки в одну. Комбинированная версия этого оператора (.=) позволяет добавить значение к окончанию данной строки.

В примере ниже поэтапно создается строка и выводиться на экран:

$phrase = "Я хочу ";
$phrase .= "изменить ";
$phrase .= "мир ";
$phrase = ."к лучшему";
echo $phrase;

Как и ожидалось, появится полное предложение. Пробелы после слов хочу, изменить и мир сделаны для того, чтобы они на слились в одно слово.

Сравнение строк

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

if ($password == "пароль") {
    echo "Вы угадали пароль";
}

При сравнении строк оператор сравнения выполняет зависимую от регистра проверку. Поэтому проверка не сработает, если в переменной $password находится, к примеру слово ПаРоль.

Другие операторы сравнения - <, <=, > и >= - выполняют сравнение на основе ASCII-значения каждого символа в строке. Проверка ниже разделяет людей на две группы, в зависимости от начальной буквы фамилии: первая от А до М и вторая от N до Z:

if ($last_name < “N”) {
    echo "Вы в первой группе 1";
}
else {
    echo “Вы во второй группе 2”;
}

ASCII-значения. Так как сравнение строк производится на основе ASCII-значений, все символы в нижнем регистре имеют большее значение, чем эквивалентные в верхнем. Символы a-z лежат в диапазоне 97-122, а символы A-Z занимают диапазон 65-90.

Форматирование строк

В PHP легко создавать форматированные строки с помощью функций printf и sprintf. Эти функции похожи на аналогичные в языке С, но в PHP есть некоторые отличия.

Возможности printf

Функция printf используется для вывода форматированной строки. В самом простом случае на вход printf передается строка, и он выводит ее так же, как и echo:

printf("Привет, мир");

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

В следующем примере используется спецификатор формата %f, для числа с плавающей точкой:

$price = 5.99;
printf ("Цена: %f", $price);

Второй параметр printf заменяет спецификатор %f, и на выходе получаем:

Цена: 5.99

Функция printf не имеет ограничений на количество заменяющих значений. Главное, чтобы количество спецификаторов формата и заменяемых значений совпадало. В примере ниже показывается этот механизм и подставляется строчное значение:

$item = "данной единицы товара";
$price = 5.99;
printf ("Цена %s равна %f", $item, $price);

В табл. 6.1 показаны форматирующие символы, которые применяются в функции printf для разных типов значений.

Пусть вместо спецификатора %f иcпользуется %d, чтобы вывести значение $price:

$price = 5.99;
printf ("Как десятичное число, цена равна %d", $price);

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

Как десятичное число, цена равна 5

Таблица 6.1. Форматирующие символы printf

Символ Значение
b Двоичное (основа 2) число
c ASCII-символ с численным значением аргумента
d Целое (основа 10) со знаком
e Число в инженерной нотации (например, 2.6e+3)
u Десятичное целое без знака
f Число с плавающей точкой
o Восьмеричное (основа 8) число
s Строка
x Шестнадцатеричное (основа 16) число в нижнем регистре
X Шестнадцатеричное (основа 16) число в верхнем регистре

Десятичный. Формат %d представляет десятичное целое. Десятичное –говорит т том, что используется десятичная система счисления (т.е. по основанию 10), а не то, что в числе есть десятичная точка. Существуют различные форматы для отображения чисел по основанию 16 (шестнадцатеричный, %x), 8 (восьмеричный, %o) и 2 (двоичный, %b).

Форматирующие коды

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

Спецификатор ширины указывает, сколько символов отводится в строке на вывод форматируемого значения. Он ставится между знаком проценты и спецификатором типа. Пример ниже позволяет убедиться, что выводимое имя занимает ровно десять знакомест:

$name1 = "Юра";
$name2 = "Петя';
$name3 = "Роман";
echo “<PRE>”;
printf(“%10s \n”, Sname1);
printf(“%10s \n”, Sname2);
printf(“%10s \n”, Sname3);
echo “</PRE>”;

Отступ. В этом примере используется дескриптор <PRE>, чтобы вывести на экран пробелы перед именем. Потому что без него браузер рассматривает несколько пробелов как один.
Строчные отступы не используются для генерации динамических Web-страниц, но они очень удобны, когда нужно сгенерировать обычный текст. Например, содержимое электронного письма.

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

По умолчанию выравнивание идет справа на заданную ширину. Но это можно изменить с помощью знака минус перед значением ширины. Выравнивание по левому краю в предыдущем примере будет выполняться, если задать спецификатор формата в виде %-10s. Но, по сути, такой же формат генерирует такой же вид, как простой %s. Строка получит отступ в десять символов справа.

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

$order = 201;
printf("Номер заказа: %'05d", $order);

На выходе получим:

Номер заказа: 00201

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

Спецификатор точности следует через точку после необязательного спецификатора ширины. В примере ниже %.2f используется для денег и задает два знака после точки, а необязательный спецификатор ширины не используется:

$price = 6;
printf("Цена: %.2f", $price);

Ниже показан отформатированный вывод:

Цена: 6.00

Ширина чисел с плавающей точкой. Для чисел с плавающей точкой спецификатор ширины задает количество символов перед точкой. Например, %62f состоит из девяти символов вместе с точкой и двумя числами после нее.

Возможности sprintf

Функция sprintf используется для того, чтобы присвоить форматированную строку переменной. Синтаксис полностью аналогичен printf, но вместо вывода на экран, функция возвращает строку как результат.

Например, для того, чтобы присвоить значение цены новой переменной, нужно сделать следующее:

$new_price = sprintf("%.2f", $price);

Функции printf и sprintf имеют одинаковые спецификаторы формата.

Строковые функции

Рассмотрим доступные в PHP функции для работы со строками.

Переключение регистра

Можно переключать регистр строки из строчного в заглавный, и наоборот, с помощью функций strtoupper или strtolower соответственно.

Пример ниже показывает этот механизм на строке со словами в разном регистре:

$phrase = “I lowe PHP”;
echo strtoupper($phrase) . “<br>”;
echo strtolower ($phrase) . “<br>”;

На выходе получим:

I LOVE PHP
i love php

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

$phrase = "welcome to the jungle";
echo ucfirst($phrase);

Для перевода первой буквы каждого слова в верхний регистр (полезно в случае ФИО) используется функция ucwords:

$phrase = "green bay packers";
echo ucwords ($phrase);

Функции ucfirst и ucwords изменяют только первый символ и не следят за регистром остальных. Поэтому, если вся строка находится в верхнем регистре, может выйти не то, что ожидается. Чтобы добиться нужного эффекта, необходимо скомбинировать их с функцией strtolower, как показано в примере ниже:

$phrase = "CHRIS NEWMAN";
echo ucwords(strtoower($name));

Разбивка строки

Функция substr позволяет извлечь часть строки. Для этого нужно задать точку отсчета и необходимую длину. В следующем примере показано, как это работает:

$phrase = "Я люблю PHP";
echo substr($phrase, 4, 5);

Функция substr возвращает часть переменной $phrase начиная с четвертой позиции, длиной в пять символов. Отметим, что отсчет позиции начинается с нуля, а не с единицы. Поэтому на выходе получим блю P.

Если не указать длину, возвращается подстрока от заданной позиции до конца строки. Следующий пример выводит люблю PHP для переменной $phrase:

echo substr($phrase, 2);

Если стартовая позиция — отрицательное число, то функция substr начинает отсчет с конца сроки. В примере ниже на экран выводится три последних символа строки, в данном случае — PHP:

echo substr($phrase, -3);

Для того чтобы узнать длину строки, используется функция strlen:

echo strlen($phrase);

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

В следующем примере выводится позиция символа @ в электронном адресе:

$email = "chris@lightwood.net";
echo strpos($email, "@");

Позиция в строке. Нужно помнить, что позиция символа в строке отсчитывается с левого края и начинается с нуля. Позиция 1 соответствует второму символу в строке. Когда strpos находит искомую последовательность в начале строки, на выходе получим ноль. Но когда искомой комбинации не обнаружено, - на выходе получим FALSE.
Чтобы определить эту разницу, нужно проверять тип. Например, условие strpos($a, $b) === 0 будет истинным только в том случае, когда $b содержится в $a, начиная с нулевой позиции.

Функция strstr извлекает часть строки от совпадающей позиции и до конца строки. Эта функция создана для удобства, чтобы не использовать комбинацию strpos и substr.

Два следующих выражения полностью эквивалентны:

$domain = strstr($email, "@");
$domain = substr($email, strpos($email, "@"));

Резюме

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


<<назад

Погода в Рудне
(Волгоградcкая обл.)

Подробнее >>


Курс валют
на 18 Апр 2024 г.
704 - Вьетнамских донгов
- 1