Строки являются основными переменными в РНР, они выступают основными посредниками при операциях с файлами и базами данных, с браузерами и серверами. Можно сказать, что работа со строками — это основная задача РНР. Строки в PHP — одни из самых универсальных объектов и работа со строками при решении задач, связанных с веб-сайтами, является весьма приоритетной. Как мы уже видели, любой, сколь угодно сложный объект можно упаковать в строку. Строка может содержать абсолютно любые символы с кодами от 0 до 255 включительно. Нет никакого специального маркера "конца строки". А значит, длина строки во внутреннем представлении PHP хранится где-то отдельно. Наконец, из-за слабого контроля типов в PHP, строка может содержать (и часто содержит) число, причем с ней можно работать, как с числом: прибавлять другие числа, умножать и т. д. При этом все преобразования (в десятичной системе) производятся автоматически. Существуют также функции, преобразующие число, записанное в различных системах счисления (например, в восьмеричной), в обычное представление, и наоборот.
Строковые значения должны быть заключены в двойные или одинарные кавычки. Вид кавычек в РНР, в отличие от JavaScript, играет важную роль.
В двойных кавычках помимо обычных видемых и служебных символов могут находиться имена переменных (идентификаторы, начинающиеся с символа $), а также теги HTML. При выводе таких строк на экран с помощью оператора echo интерпретатор РНР заменяет идентификаторы переменных их значениями, а теги HTML интерпретируются браузером.
В браузере служебные символы, такие как \n (перевод строки) и \t (табуляция), не выполняют своей функции, но отображаются в виде пробела.
Если строковое значение заключено в одинарные кавычки, то служебные символы отображаются в виде пар \n, \t и т.д. При этом теги HTML интерпретируются браузером.
Пример:
<?php
$x="Привет";
$y="$x всем!";
$z='$x всем!';
echo $y; //вывод: Привет всем!
echo '<br>';
echo $z; //вывод: $x всем!
?>
В окне веб-браузера это будет выглядеть ТАК.
Длинные последовательности символов, которые в текстовом редакторе занимают нескодько строк, можно задать с помощью так называемого heredoc-синтаксиса, не используя кавычек:
Переменная = <<<Метка
текст
Метка;
Пример:
<?php
$x=<<<MYDIN //где, MYDIN-МЕТКА
Широка
страна моя
родная!
MYDIN;
echo $x; //вывод: Широка страна моя родная!
?>
В окне веб-браузера это будет выглядеть ТАК.
При работе с модулем РНР CLI (с интерфейсом командной строки) текст на экране будет иметь такое же расположение, что и между метками в РНР-коде. В окне браузера он будет отображен в виде одной или нескольких строк в зависимости от ширины клиентской области браузера. При этом части текста, расположенные в РНР-коде в различных строках, будут отображаться в одной строке через пробел.
Рассмотренный выше пример в окне браузера отображается точно так же, как и следующий код:
<?php
$x="
Широка
страна моя
родная!
";
echo $x;
?>
В окне веб-браузера это будет выглядеть ТАК.
Внимание! При использовании heredoc-синтаксиса небходимо соблюдать следующие правила:
Чтобы в строке, обрамленной двойными кавычками, отключить интерпретацию таких служебных символов, как двойные кавычки и $, перед ними следует указать обратный слэш(\).
Пример:
<?php
$x=5;
echo "Роман А.Н. Толстого \"Война и мир\"";
echo '<br>';
echo "\$x=$x";
echo '<br>';
echo "\$x='$x'";
echo '<br>';
echo "$x=$x";
?>
В окне веб-браузера это будет выглядеть ТАК.
Cтроки в одинарных кавычках храняться как есть, за исключением пары \', которая хранится как символ апострофа(одинарная кавычка). В строках могут встречаться теги HTML, которые позволяют отформатировать выводимый текст, а также выполнить другие действия. Интерпретатор РНР не интерпретирует их, а сохраняет как есть. С помощью оператора echo они направляются браузеру, который выполняет соответствующий HTML-код. Поскольку внутри HTML-кода могут использоваться кавычки различных видов, при формировании строк в РНР следует быть внимательным, чтобы правильно их расставлять и сочетать друг с другом.
Самая, пожалуй, распространенная операция со строками — это их конкатенация, или присоединение к одной строке другой. Для конкатенации строк ввели специальный оператор "." (точка).
Пример:
<?php
$a= "Широка";
$b= $a." страна";
$b="$a страна";
$b.=" моя родная!";
echo $b;
?>
В окне веб-браузера это будет выглядеть ТАК.
Оператор "." всегда воспринимает свои операнды как строки и возвращает строку. В случае, если один из операндов не может быть переведен в строковое представление, т. е. если это массив или объект, то он воспринимается как строки array и object соответственно. Вообще говоря, это правило применимо не только при сцеплении строк, но и при передаче такого операнда в какую-нибудь стандартную функцию, которой требуется строка.
Например, следующие команды выведут слово array:
<?php
$a=array(10,20,30);
echo $a // array
?>
В окне веб-браузера это будет выглядеть ТАК.
Есть и другой, более специализированный, способ конкатенации строк. Он обычно используется, когда значения строковых или числовых переменных перемежаются с обычными словами. Если, к примеру, у нас в $day хранится текущее число, в $month — название месяца и в $year — год, то вывести строку вида "Сегодня 8 января 2009 года" можно так:
<?php
$day=8;
$month=" января";
$year=2009;
echo "Сегодня $day $month $year года";
?>
В окне веб-браузера это будет выглядеть ТАК.
При этом в строку, вырабатываемую инструкцией echo, автоматически в нужных местах вставятся значения наших переменных. Это позволяет констатировать тот факт, что в PHP все переменные начинаются с $.
Для преобразования символьных строк в РНР имеется большое количество встроенных функций. Здесь мы рассмотрим лишь несколько наиболее важных из них.
strlen(строка) — возвращает длину строки(количество символов), указанной в качестве параметра. При этом служебные символы, такие как перевод строки, табуляция и др., также будут подсчитаны. Например, строка "Привет, всем!" может быть набрана в РНР-коде по разному, что может сказаться на ее длине, хотя все варианты при этом отображаться одинаково:
В окне веб-браузера это будет выглядеть ТАК.
Здесь во втором варианте присваивания значения переменной $x после запятой присутствует невидимый служебный символ перевода строки, который в действительности состоит из двух символов, а перед словом "всем" нет ни одного пробела( в первом варианте есть пробел). Не трудно подсчитать, что 13-1+2=14. Данное обстоятельство следует учесть, если вам потребуется написать какой-нибудь код анализа текстовых строк.
trim(строка) — удаляет из строки и начальные и конечные пробелы;
ltrim(строка) — удаляет строки начальные пробелы;
rtrim(строка) — удаляет из строки конечные пробелы;
Пример:
В окне веб-браузера это будет выглядеть ТАК.
Чтобы убедиться, что эта функция нас не обманывает, выведем ее длину до и после удаления из нее пробелов.
В окне веб-браузера это будет выглядеть ТАК.
strstr (строка, символ) — возвращает часть строки, начиная с указанного символа и до конца строки. Если строка не найдена, то возвращается false.
В окне веб-браузера это будет выглядеть ТАК.
В окне веб-браузера это будет выглядеть ТАК.
stristr(строка, символ) — функция работает абсолютно аналогично функции strstr(), только является нечувствительной к регистру.
strrchr(строка, символ) — возвращает часть строки, начиная с указанного символа и до конца строки. Если строка не найдена, то возвращает false. В отличии от strstr() поиск символа ведется от конца строки.
<?php
$url = "http://sevidi.narod.ru";
$www = strrchr($url,"s");
echo $www;
?>
В окне веб-браузера это будет выглядеть ТАК.
strpos(строка1, строка2) — возвращает позицию первого вхождения второй строки в первую. Если строка не найдена, то возвращается false. Нумерация позиций начинается с нуля и производится слева направо.
В окне веб-браузера это будет выглядеть ТАК.
strrpos(строка1, строка2) — возвращает позицию последнего вхождения второй строки в первую. Если строка не найдена, то возвращается false. Нумерация позиций начинается с нуля и производится слева направо.
В окне веб-браузера это будет выглядеть ТАК.
В окне веб-браузера это будет выглядеть ТАК.
str_replace(строка1, строка2, строка) — заменяет в строка все вхождения в строка 1 на строка2. В качестве заменяемой и замещающих строк могут быть не только видимые символы, но и символы табуляции, конца строки и файла.
<?php
$a = "Из далека долго, течет река Волга, течет ...";
$a1= str_replace( "долго", "река" , $a); /*возвращает Из далека река, течет река Волга, течет*/
echo $a1 ;
?>
В окне веб-браузера это будет выглядеть ТАК.
strtr(строка, строка1, строка2) — заменяет в строка каждое вхождение любого символа из строка1 на соответствующий ему символ в строка2. Если строка1 и строка2 имеют различные длины, то лишние символы в более длинной строке не используются.
<?php
$a = "<b> Из далека долго, течет река Волга, течет ...</b>";
$a1= strtr($a, "<b>", "<i>" ); //замена символа <b> на символ <i>
echo $a1 ;
?>
В окне веб-браузера это будет выглядеть ТАК.
str_repeat(строка, число) — повторяет указанную строку заданное количество раз и возвращает ее.
<?php
$a1= str_repeat("долго ", 4 ); //возвращает долго долго долго долго
echo $a1 ;
?>
В окне веб-браузера это будет выглядеть ТАК.
strrev(строка) — производит реверс строки. Возвращает указанную строку, заменив порядок следования символов на противоположный.
В окне веб-браузера это будет выглядеть ТАК.
Строки по своей сути являются массивами символов, завершающихся нулевым символом, поэтому к любому символу строки можно обратиться по его индексу, который начинается с 0:
$str[0], $str[1], . . . , $str[n];
Пример:
<?php
$str = "Из далека долго, течет река Волга, течет ...";
echo $str[0]."<br>";//выводит: И
echo $str[1]."<br>";//выводит: з
echo $str[2]."<br>";//выводит: (пробел)
echo $str[3]; //выводит: д
?>
В окне веб-браузера это будет выглядеть ТАК.
Некоторые базы данных формируют отчет или дамп базы данных, размещая периодически через определенное число строк символы перевода страницы(символ с кодом 12 из таблицы ASCII-кодов), что затрудняет автоматическую обработку таких данных. проблему можно решить, если заменить этот символ переводом строки, используя ранее рассмотренную функцию str_replace(). Но символ перевода страницы не так просто набрать с клавиатуры. В Windows символы перевода страницы предваряют символом возврата каретки — \r.
Для решения таких задач в РНР введена функция chr(), которая возвращает символ по его ASCII-коду и имеет следующий синтаксис:
chr (параметр_ ascii)
Пример:
<?php
$text = "Из далека долго, течет река Волга, течет ...";
$str=str_replace(chr(36), "\n", $text);/*выводит: Из далека долго, течет река Волга, течет ...*/
echo $str. '<br>';
$ctr=chr(36);// выводит: $
echo $ctr;
?>
В окне веб-браузера это будет выглядеть ТАК.
В файлах могут быть различные управляющие символы, не воспроизводимые редактором. Для определения их значения используется функция ord(), которая возвращает ASCII-код символа:
ord(значение)
Если в значение содержится более одного символа, ASCII-код будет возвращен только для первого.
Пример:
<?php
$str=ord('$');//выводит 36
echo $str;
?>
В окне веб-браузера это будет выглядеть ТАК.
Еще одной функцией, позволяющей получить статистическое распределение символов в строке, является функция count_chars().
count_chars(строка [, int mode]) — подсчитывает количество вхождений каждого из символов с ASII кодами в диапазоне (0..255) в строку строка и возвращает эту информацию в различных формата. Необязательный аргумент mode по умолчанию равен 0. В зависимости от его значения возвращается:
0 — массив, индексами которого являются ASCII коды, а значениями — число вхождений соответствующего символа.
1 — то же, что и для 0, но информация о символах с нулевым числом вхождений не включается в массив.
2 — то же, что и для 0, но в массив включается информация только о символах с нулевым числом вхождений.
3 — строка, состоящая из символов, которые входят в исходую строку хотя бы раз.
4 — строка, состоящая из символов, которые не входят в исходую строку.
Пример:
<?php
$str = "Из далека долго, течет река Волга, течет ...";
$result=count_chars($str, 0);
for($i=0; $i<count($result); $i++) {
if($result[$i]!=0)
echo "\"" , chr($i) , "\"<pre> встречается в строке $result[$i] раз(а).\n";
}
?>
В окне веб-браузера это будет выглядеть ТАК.