Четверг, 16.05.2024, 22:35
DigitalBox
Приветствую Вас Гость | RSS
Главная Работа со строками символов Регистрация Вход
Меню сайта

Работа со строками символов



К символам (character) относятся буквы, числа и знаки пунктуации. Строка символов (или текстовая строка) (character string) является последовательностью символов. Если числа используются в качестве символов, они сохраняются так же, как и буквы, т.е. над ними невозможно выполнять арифметические операции. Например, номер телефона обычно хранится как строка, поскольку над ним не нужно выполнять никаких математических действий.

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

$string = "Здравствуй, мир!";
$string = 'Здравствуй, мир!';

Работа с длинными текстовыми строками

В языке РНР имеется heredoc-механизм, позволяющий сохранять в переменных длинные последовательности символов, которые могут занимать несколько строк. Этот механизм позволяет указать начало и конец строки символов с использованием следующего синтаксиса:

$имя_переменной = <<<МЕТКА
текст
МЕТКА;

Здесь МЕТКА представляет собой произвольное имя. Если в переменной $имя_переменной необходимо сохранить некоторый текст, его нужно заключить между метками МЕТКА. Тогда при обработке этого выражения интерпретатор РНР сможет определить, где находится начало и конец строки, и разместит текст в переменной $имя_переменной.

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

Ниже приведен пример создания строки с использованием heredoc-механизма:

$distance = 10;
$herevariable = <<<ENDOFTEXT
Расстояние между
Лос-Анджелесом и Пасаденой
составляет $distance миль.
ENDOFTEXT;
echo $herevariable;

При выводе значения переменной $herevariable на экран будет получено следующее:

Расстояние между
Лос-Анджелесом и Пасаденой
составляет 10 миль.

Однако при использовании таких строк нужно соблюдать осторожность. К выбору меток интерпретатор РНP предъявляет достаточно жесткие требования. При первом появлении МЕТКА (в данном примере ENDOFTEXT) должна находиться в конце первой строки так, чтобы за ней не было ни одного символа, даже пробела. То же самое касается и завершающей метки: за ней не должно быть никаких символов, кроме точки с запятой. Если эти правила не выполняются, символ конца строки не будет распознан, интерпретатор PHР продолжит поиск этого символа в оставшейся части сценария и в конечном счете будет сгенерировано сообщение об ошибке.


Использование в строках специальных символов

В языке РНР определены специальные символы, \n и \t , которые можно использовать в строках. Символ \n является символом перехода на новую строку. Например:

$string = "Здравствуй, \nмир";
echo $string;

В результате будет выведено следующее:

Здравствуй,
мир

Символ \t является символом табуляции. Например, использование фрагмента

$string = "Строка 1 \n\tстрока 2";
echo $string;

приведет к тому, что вторая строка будет выведена с отступом:

Строка 1
         строка 2

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


Сравнение строк в одинарных и двойных кавычках

Строки в одинарных и двойных кавычках обрабатываются интерпретатором РНР поразному.

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

В следующих примерах проиллюстрированы различия между строками в одинарных и двойных кавычках.

Если имя переменной разместить в двойных кавычках, интерпретатор РНР будет использовать ее значение, а если в одинарных — ее имя. Например:

$name = "Сэм";
$output1 = "$name";
$output2 = '$name';
echo $output1;
echo $output2;

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

Сэм
$name

Аналогично обрабатываются и специальные символы. Если их разместить в строке с двойными кавычками, то специальные символы будут интерпретироваться, а если в строке с одинарными кавычками — нет. Эти отличие проиллюстрированы в следующем примере:

$string1 = "Строка в \n\tдвойных кавычках";
$string2 = 'Строка в \n\tодинарных кавычках';

Первая строка отобразится так:

Строка в
         двойных кавычках

а вторая — так:

Строка в \n\tодинарных кавычках

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

$number = 10;
$stringl = "В очереди находится '$number' людей.";
$string2 = 'В очереди находится "$number" людей.';
echo $stringl, "\n";
echo $string2;

При обработке этого выражения будет получен следующий результат:

В очереди находятся '10' людей.
В очереди находятся "$number" людей.

Обратите внимание, что, несмотря на то, что в строке $string1 имя переменной $number заключено в одинарные кавычки, двойные кавычки приводят к интерпретации ее значения, а не имени. При выводе второй строки происходит обратное. Поскольку вся строка заключена в одинарные кавычки, то она выводится без интерпретации переменных, имена которых включены в нее.


Сокрытие символов

Иногда необходимо, чтобы в строках с двойными кавычками символы использовались "как есть", т.е. без учета их специального назначения. Например, может понадобиться, чтобы символ доллара интерпретировался как обычный символ, а не как первый символ имени переменной. Такого эффекта можно добиться с помощью символа обратной косой черты (backslash) (\). Например:

$string = 'Имя переменной — $var1 ' ;
$ string = "Имя переменной - \$var1";

При выводе обе строки будут выглядеть одинаково:

Имя переменной — is $var1

Пусть, например, необходимо присвоить строковой переменной следующее значение:

$string = 'Где находится дом О'Хары?';
echo $string;

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

Где находится дом О

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

$string = 'Где находится дом 0\'Хары?';

Точно так же, если в строке, заключенной в двойные кавычки, необходимо разместить символ ", то перед ним нужно разместить символ \.

Объединение текстовых строк

Процедура объединения текстовых строк называется конкатенацией (concatenation). В языке РНР для выполнения конкатенации используется операция точки (.). Рассмотрим следующий пример:

$string1 = "Здравствуй,";
$string2 = "мир!";
$stringall = $string1.$string2;
echo $stringall;

При выполнении этого фрагмента будет получен следующий результат:

Здравствуй,мир!

Обратите внимание, что в результирующей строке не содержится символ пробела (""), поскольку он отсутствует в обеих исходных строках. Для добавления символа пробела между отдельными словами нужно объединить три строки: две переменные и непосредственно строку с символом пробела. Например:

$stringall = $string1." ".$string2;

Для добавления символов к существующей строке можно воспользоваться операцией .=. Например, предыдущие примеры можно модифицировать таким образом:

$stringall = "Здравствуй,";
$stringall .= " мир!";
echo $stringall;

В результате получим следующее:

Здравствуй, мир!


Манипуляция строками

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

Зачастую в начале или в конце строки нужно удалить ненужные пробелы. Это можно осуществить следующим образом:

$string = trim($string) # удаляет пробелы в начале и в конце строки
$string = ltrim($string) # удаляет пробелы только в начале строки
$string = rtrim($string) # удаляет пробелы только в конце строки

С использованием функции str_word_count () строку можно легко разбить на отдельные слова:

str_word_count("строка", формат)

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

$string = "Подсчет слов";
$numberOfWords = str_word_count($string);
$word1 = str_word_count($string, 1);
$word2 = str_word_count($string, 2);

При выполнении этого фрагмента будут получены такие результаты:

$numberOfWords = 2
$wordl[0] = Подсчет
$wordl[1] = слов
$word2[0] = Подсчет
$word2[9] = слов

Обратите внимание, что первое слово начинается с позиции с 0 (а не с 1, как многие могли бы предположить), а следующее— с позиции 9. Рассматривая примеры, не забывайте о том, что нумерация символов в строке начинается с нуля.


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

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

$number = 4 ;
echo "У Салли $number детей.";

В результате выполнения этого фрагмента получим следующую строку:

У Салли 4 детей.

Несмотря на то что в переменной $number содержится число 4, функция echo отображает его как часть символьной строки.

Форматирование данных является одним из важных этапов написания сценариев. Однако функция echo оказывается недостаточно гибкой. В разделе "Форматирование чисел для вывода" этого раздела уже рассматривались возможности функции number_format(), связанные с форматированием чисел. Для форматирования строк в языке РНР также имеются дополнительные возможности. Функции printf() и sprintf() позволяют форматировать строки, числа, а также их произвольную комбинацию.

Функции printf() и sprintf() имеют следующий общий синтаксис:

printf("формат", $имя_переменной1, $имя__переменной2, ...);
$newvar = sprintf("формат", $имя_переменной1, $имя_переменной2, ...);

Функция printf () предназначена для вывода уже отформатированной строки, а функция sprintf() сохраняет ее в переменной. При этом обе функции позволяют обрабатывать комбинацию чисел, строк и значений переменных. Параметр формат позволяет задать шаблон, в соответствии с которым будут форматироваться переменные $имя_переменной. Например, следующее выражение является абсолютно корректным:

$newvar = sprintf("Здравствуй, мир!");

В этом выражении не выполняется никакого форматирования, и строка Здравствуй, мир! сохраняется в переменной $newvar. Однако строковые литералы можно объединять с переменными с текстовыми символами, как показано в следующем примере:

$nboys = 3;
$ngirls = 2;
printf("%s парней и %s девушек", $nboys, $ngirls);

Строка %s представляет собой инструкцию форматирования, которая указывает футами printf() на необходимость вставки значения переменной как строки. Таким образом, результатом выполнения приведенного выше примера будет строка 3 парней и 2 девушек. Символ % сообщает функции printf() о том, что дальше следует инструкция форматирования. Инструкции форматирования имеют следующий общий формат:

%заполнитель-длина.точностьтип

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

  • Символ процента (%) является первым символом инструкции форматирования.
  • Заполнитель. Символ-заполнитель, используемый для дополнения строки до заданной длины (этот параметр описывается ниже). Параметр заполнитель может содержать пробел (по умолчанию), 0 или любой другой символ, которому предшествует символ одинарной кавычки. Часто в качестве символа-заполнителя используется значения 01 или 0001.
  • Символ выравнивания (-). При его использовании результат будет выравниваться по левой стороне, в противном случае — по правой (режим по умолчанию).
  • Длина определяет ширину выводимого значения. Если количество выводимыx символов меньше длины, то недостающее пространство заполняется символом-заполнителем. Например, если длина равна 5, заполнитель— 0, а форматируемое значение — 1, то в результате будет получена строка 00001
  • .точность. Определяет, сколько десятичных знаков после точки должно выводиться при форматировании действительных чисел.
  • тип значения. Обычно используется строковый тип — s (string). Для вывода чисел с плавающей точкой используется тип f (float).

Ниже приведено несколько примеров использования функции sprintf().

$money = 30;
$pet = "Kitten";
$new = sprintf('It costs $%03.2f for a %s.\n", $money, $pet);
$new2 = sprintf("%'.-20s%3.2f", $pet, $money);
echo $new;
echo $new2;

В результате выполнения этого фрагмента получим следующий результат:

I t costs $030.00 for a Kitten.
Kitten ..............30.00

Обратите внимание на то, что для форматирования значения переменной $money используется шаблон 3.2f (три цифры до десятичной точки и две после нее). Этот шаблон используется при формировании обеих строковых переменных, $new и $new2. В то же время в переменной $new значение переменной $money дополняется символом 0, а в $new2 — пробелом.

При добавлении переменной $pet в переменную $new2 использовался шаблон '.-20. Значение 20 определяет количество символов, которые будут использоваться для переменней $pet. Поскольку значение этой переменной Kitten занимает шесть символов, оставшееся пространство дополняется символом-заполнителем ('.), т.е. дополнительно будет выведено 14 точек (.). Инструкция выравнивания (-) определяет, что строка Kitten будет выравниваться по левому краю. В противном случае использовалось бы выравнивание по правому краю.

Зачастую необходимо вывести столбцы чисел. Пусть, например, имеется три числа: 12.3, 1 и 234.55. При использовании функции echo будет получен следующий результат:

12.3
1
234.55

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

12.30
1.00
234.55

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

printf("%5.2f\n", $number1);
printf("%5.2f\n", $number2);
printf("%5.2f\n", $number3);

Только теперь получен необходимый результат:

  12.30
    1.00
234.55

Для вывода числовых значений в данном случае использовался шаблон форматирования %5.2f\n. Рассмотрим его составные части более подробно.

  • %. Первый символ инструкции форматирования.
  • 5. Определяет ширину, т.е. количество знаков, которое будет использоваться для вывода чисел. Если количество цифр в числе меньше 5, то спереди добавляются символы-заполнители (в данном случае пробелы). Поскольку выравнивание справа используется по умолчанию, то символ выравнивания не используется.
  • 2. Определяет количество знаков после десятичной точки.
  • Тип f определяет, что числа будут выводиться как числа с плавающей точкой.
  • \n. Символ перевода строки.

Для того чтобы вывести число в денежном формате (со знаком $), можно воспользоваться функцией sprintf(). Например:

$newvariablename = sprintf("$%.2f", $oldvariablename);

В этом выражении форматируется значение переменной $oldvariablename, а результат сохраняется в переменной $newvariablename. В следующем примере денежное значение выводится в правильном формате:

$price = 25;
printf("$%.2f", $price);

В результате получим следующее:

$25.00

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz