Строки являются основными переменными в РНР, они выступают основными посредниками при операциях с файлами и базами данных, с браузерами и серверами. Можно сказать, что работа со строками — это основная задача РНР. Строки в PHP — одни из самых универсальных объектов и работа со строками при решении задач, связанных с веб-сайтами, является весьма приоритетной. Как мы уже видели, любой, сколь угодно сложный объект можно упаковать в строку. Строка может содержать абсолютно любые символы с кодами от 0 до 255 включительно. Нет никакого специального маркера "конца строки". А значит, длина строки во внутреннем представлении PHP хранится где-то отдельно. Наконец, из-за слабого контроля типов в PHP, строка может содержать (и часто содержит) число, причем с ней можно работать, как с числом: прибавлять другие числа, умножать и т. д. При этом все преобразования (в десятичной системе) производятся автоматически. Существуют также функции, преобразующие число, записанное в различных системах счисления (например, в восьмеричной), в обычное представление, и наоборот.
Строковые значения должны быть заключены в двойные или одинарные кавычки. Вид кавычек в РНР, в отличие от JavaScript, играет важную роль.
Двойные и одинарные кавычки PHP
В двойных кавычках помимо обычных видемых и служебных символов могут находиться имена переменных (идентификаторы, начинающиеся с символа $), а также теги 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-синтаксиса небходимо соблюдать следующие правила:
- за первым идентификатором метки не должно быть ни каких символов, в т.ч. и пробелов;
- за заключительным идентификатором метки должен находится единственный символ точки с запятой.
Чтобы в строке, обрамленной двойными кавычками, отключить интерпретацию таких служебных символов, как двойные кавычки и $
, перед ними следует указать обратный слэш(\)
.
Пример:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Двойные и одинарные кавычки</title>
</head>
<body>
<?php
$x=5;
echo "Роман А.Н. Толстого \"Война и мир\"";
echo '<br>';
echo "\$x=$x";
echo '<br>';
echo "\$x='$x'";
echo '<br>';
echo "$x=$x";
?>
</body>
</html>
В окне веб-браузера это будет выглядеть ТАК.
Cтроки в одинарных кавычках храняться как есть, за исключением пары \'
, которая хранится как символ апострофа(одинарная кавычка). В строках могут встречаться теги HTML, которые позволяют отформатировать выводимый текст, а также выполнить другие действия. Интерпретатор РНР не интерпретирует их, а сохраняет как есть.
С помощью оператора echo
они направляются браузеру, который выполняет соответствующий HTML-код. Поскольку внутри HTML-кода могут использоваться кавычки различных видов, при формировании строк в РНР следует быть внимательным, чтобы правильно их расставлять и сочетать друг с другом.
Конкатенация строк PHP
Самая, пожалуй, распространенная операция со строками — это их конкатенация, или присоединение к одной строке другой. Для конкатенации строк ввели специальный оператор "."
(точка).
Пример:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Cклейка строк</title>
</head>
<body>
<?php
$a= "Широка";
$b= $a." страна";
$b="$a страна";
$b.=" моя родная!";
echo $b;
?>
</body>
</html>
В окне веб-браузера это будет выглядеть ТАК.
Оператор "."
всегда воспринимает свои операнды как строки и возвращает строку. В случае, если один из операндов не может быть переведен в строковое представление, т. е. если это массив или объект, то он воспринимается как строки 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 все переменные начинаются с $
.
Преобразование строк PHP
Для преобразования символьных строк в РНР имеется большое количество встроенных функций. Здесь мы рассмотрим лишь несколько наиболее важных из них.
strlen(строка)
— возвращает длину строки(количество символов), указанной в качестве параметра. При этом служебные символы, такие как перевод строки, табуляция и др., также будут подсчитаны. Например, строка "Привет, всем!" может быть набрана в РНР-коде по разному, что может сказаться на ее длине, хотя все варианты при этом отображаться одинаково:-
<?php
$x="Привет, всем!";
strlen($x); //возвращает 13
echo strlen($x);
echo "<br>";
$x="Привет,
всем!";
strlen($x); //возвращает 15
echo strlen($x);
?>Здесь во втором варианте присваивания значения переменной $x после запятой присутствует невидимый служебный символ перевода строки, который в действительности состоит из двух символов, а перед словом "всем" нет ни одного пробела( в первом варианте есть пробел). Не трудно подсчитать, что 13-1+2=14. Данное обстоятельство следует учесть, если вам потребуется написать какой-нибудь код анализа текстовых строк.
trim(строка)
— удаляет из строки и начальные и конечные пробелы;-
ltrim(строка)
— удаляет строки начальные пробелы;
rtrim(строка)
— удаляет из строки конечные пробелы;Пример:
<?php
$a = trim(" Hello, world! ");
echo $a;
?>Чтобы убедиться, что эта функция нас не обманывает, выведем ее длину до и после удаления из нее пробелов.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Строковая функция trim </title>
</head>
<body>
<?php
$a= " Hello, world! ";
$a1 = trim(" Hello, world! ");
$str_len = strlen($a);
$str1_len = strlen($a1);
echo " Размер исходной строки '$a' = $str_len, <br>
размер строки после удаления пробелов = $str1_len";
?>
</body>
</html>В окне веб-браузера это будет выглядеть ТАК.
strstr (строка, символ)
— возвращает часть строки, начиная с указанного символа и до конца строки. Если строка не найдена, то возвращаетсяfalse
.-
<?php
$url = "http://sevidi.narod.ru";
$www = strstr($url,"s"); //возвращает sevidi.narod.ru
echo $www;
?> strchr(строка, символ)
— работает эдентично функцииstrstr()
.-
<?php
$url = "http://sevidi.narod.ru";
$www = strchr($url,"s"); //возвращает sevidi.narod.ru
echo $www; ?> stristr(строка, символ)
— функция работает абсолютно аналогично функцииstrstr()
, только является нечувствительной к регистру.strrchr(строка, символ)
— возвращает часть строки, начиная с указанного символа и до конца строки. Если строка не найдена, то возвращаетfalse
. В отличии отstrstr()
поиск символа ведется от конца строки.-
<?php
$url = "http://sevidi.narod.ru";
$www = strrchr($url,"s");
echo $www;
?> strpos(строка1, строка2)
— возвращает позицию первого вхождения второй строки в первую. Если строка не найдена, то возвращаетсяfalse
. Нумерация позиций начинается с нуля и производится слева направо.-
<?php
$a = "Из далека долго, течет река Волга.";
$a1=strpos($a,"течет"); //возвращает 17
echo $a1 ;
?> strrpos(строка1, строка2)
— возвращает позицию последнего вхождения второй строки в первую. Если строка не найдена, то возвращается false. Нумерация позиций начинается с нуля и производится слева направо.-
<?php
$a = "Из далека долго, течет река Волга, течет ...";
$a1=strrpos($a,"течет"); //возвращает 35
echo $a1 ;
?> substr(cтрока, число1, число2)
— возвращает подстроку начинающуюся с позиции число1 и длиной число2. Нумерация позиций начинается с нуля.-
<?php
$a = "Из далека долго, течет река Волга, течет ...";
$a1= substr($a,9,24); //возвращает долго, течет река Волга
echo $a1 ;
?> 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(строка) — производит реверс строки. Возвращает указанную строку, заменив порядок следования символов на противоположный.
-
<?php
$a1= strrev("долго "); //возвращает оглод
echo $a1 ;
?>
Работа с символами PHP
Строки по своей сути являются массивами символов, завершающихся нулевым символом, поэтому к любому символу строки можно обратиться по его индексу, который начинается с 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";
}
?>
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться