Строка (тип string) - это набор символов, где символ - это то же самое, что и байт. Это значит, что PHP поддерживает ровно 256 различных символов, а также то, что в PHP нет встроенной поддержки Unicode.

Простейший способ определить строку - это заключить её в одинарные кавычки (символ '). Чтобы использовать одинарную кавычку внутри строки, проэкранируйте её обратным слешем (\). Если необходимо написать сам обратный слеш, продублируйте его (\\). Все остальные случаи применения обратного слеша будут интерпретированы как обычные символы: это означает, что если вы попытаетесь использовать другие управляющие последовательности, такие как \r или \n, они будут выведены как есть вместо какого-либо особого поведения. 

Давайте рассмотрим частые примеры работы со строками в PHP.

Строковые операторы

Основными строковыми операторами являются конкатенация и присваивание с конкатенацией.

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

Данные оператор позволяет объединить две и более строк в одну. 


$str1 = 'У лукоморья дуб зелёный;';
$str2 = 'Златая цепь на дубе том';

$str = $str1 . ' ' . $str2; //Объединяем (склеиваем) 3 строки $str1, пробел и $str2
var_dump($str);

Результат:

string(87) "У лукоморья дуб зелёный; Златая цепь на дубе том"

Присваивание с конкатенацией

Этот оператор позволяет "приклеить" строки более короткой записью. Изменим вышеуказанный пример:

$str1 = 'У лукоморья дуб зелёный;';
$str2 = 'Златая цепь на дубе том';

$str .= $str1;
$str .= ' ';
$str .= $str2;

var_dump($str);

Результат тот же самый:

string(87) "У лукоморья дуб зелёный; Златая цепь на дубе том"

Данный пример может не очень хорошо отражает удобство этого метода. Но представьте что у вас есть массив строковых значений и вам нужно проверить его элементы и при определённых условиях собрать из них строку.


$str = '';
$arr = [
	'Строка 1 ',
	'Строка 2 ',
	'Строка 3 ',
	'Строка 4 ',
	'Строка 5 '
];

foreach($arr as $item) {
	//некоторая проверка
	$str .= $item;
}

var_dump($str);


Результат:

string(75) "Строка 1 Строка 2 Строка 3 Строка 4 Строка 5 "

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

Подсчёт символов в строке

Рассмотрим функции позволяющие сосчитать символы в строке.

Получить длину строки

Для этого используется функция strlen() принимающая саму строку, возвращает целое число, количество всех символов в строке. Если в строке есть кирилические символы в кодировке UTF-8, функция вернёт не правильный результат. Чтобы получить верную длину строки для кириллицы, используйте функцию mb_strlen().


$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том';

echo strlen($str) . '<br/>';
echo mb_strlen($str) . '<br/>';

Результат:

87
48

Вообще для работы со строками в UTF-8 есть целый набор функций с префиксом mb.

Количество символов без пробелов

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

$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том';

//заменяем в строке все пробелы
$str = mb_ereg_replace('[\s]', '', $str);

//Считаем поличество символов
echo mb_strlen($str); 

Количество слов в строке


$str = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';

//Считаем количество слов в строке
$count = str_word_count($str);

var_dump($count); // вернёт 8

Функция str_word_count() не работает с кириллицей по умолчанию и не имеет "двойника" с префиксом mb_. Чтобы это исправить, нужно передать дополнительные аргументы, формат возвращаемых данных равный 2, в этом случае функция вернёт массив, а третий аргумент, строка с русским алфавитом в разном регистре.

//Не работает без доп.параметров для строк с кириллицей
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том';

//Считаем количество слов в строке, результат будет в виде массива отдельных слов
$arr = str_word_count($str, 2, 'АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя');

//Считаем количество элементов в массиве
$count =count($arr)

var_dump($count); //вернёт 9

Количество переносов в строке

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

$str = 'У лукоморья дуб зелёный;
Златая цепь на дубе том:
И днём и ночью кот учёный
Всё ходит по цепи кругом;';

echo substr_count($str, PHP_EOL); // вернёт 3

Количество букв в строке

Опять таки исходная строка требует внесения предварительных изменений.

//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

//Оставляем только буквы в строке
echo $str = preg_replace('/[^a-zа-яё]/ui', '', $str); 

//Считаем количестсво букв
echo mb_strlen($str); // вернёт 39

Количество цифр в строке

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

//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

//Оставляем только буквы в строке
echo $str = preg_replace('/[^0-9]/ui', '', $str); 

//Считаем количестсво букв
echo mb_strlen($str); // вернёт 0


Количество знаков препинания


//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

//Оставляем только буквы в строке
echo $str = preg_replace('/[^[:punct:]]/', '', $str); 

//Считаем количестсво букв
echo mb_strlen($str); // вернёт 2

Количество пробелов в строке


//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

echo substr_count($str, ' '); //Вернёт 8

Поиск по строке

Рассмотрим различные методы поиска в строке.

Получить количество определённых слов в строке


//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

echo mb_substr_count($str, 'Златая'); // 1

Есть зависимость от регистра, т.е. вот так функция ничего не найдёт:

echo mb_substr_count($str, 'златая'); // 0

Позиция первого вхождения подстроки в строку

Тут есть функция позволяющая игнорировать регистр символов

//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

//С учётом регистра
echo mb_strpos($str, 'Златая'); // 25
 
// Без учета регистра
echo mb_stripos($str, 'златая'); // 25

Позиция последнего вхождения подстроки в строку

Так же можно игнорировать регистр

//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

//С учётом регистра
echo mb_strrpos($str, 'дуб'); // 40
 
// Без учета регистра:
echo mb_strrpos($str, 'дуб'); // 40

Найти все вхождения подстроки


//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

$offset = 0;
$allpos = [];

while (($position = mb_strpos($str, 'дуб', $offset)) !== false) {
	$offset   = $position + 1;
	$allpos[] = $position;
}

echo '<pre>';
print_r($allpos);
echo '</pre>';

Результат:

Array
(
    [0] => 12
    [1] => 40
)

Обратите внимание на сравнение !== false, это сделано для того, чтобы учесть подстроку, если она будет в начале строки и её позиция будет равна 0. Такое сравнение позволяет исключить приведение 0 к false, что привело бы к логической ошибке.

Замена в строках

Функция substr_replace($search, $replace, $subject, $count) заменяет часть $search строки $subject на $replace. Она также не раотает с кирилицей в кодировке UTF-8, в библиатеке mb_string её нет, поэтому нам потребуется написать свой аналог:

/**
 * @param $original
 * @param $replacement
 * @param $position
 * @param $length
 * @return string
 */
function mb_substr_replace($original, $replacement, $position, $length){
    $startString = mb_substr($original, 0, $position, 'UTF-8');
    $endString = mb_substr($original, $position + $length, mb_strlen($original), 'UTF-8');
    $out = $startString . $replacement . $endString;
    return $out;
}
Замени часть строки

//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

//Ищем подстроку "зелёный" и заменяем её на "красный"
var_dump(mb_substr_replace($str, 'красный', mb_strpos($str, 'зелёный'), mb_strlen('зелёный')));

Результат:

string(88) "У лукоморья дуб красный; Златая цепь на дубе том:"

Замена символов и слов в строке

В php есть функция  str_replace($search, $replace, $subject) которая будет сама осуществлять поиск вхождения, расчёт длины строки и при этом, она будет работаь со всеми кодировками.

Замена пробелов в строке



//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

echo str_replace(' ', '*', $str); // У*лукоморья*дуб*зелёный;*Златая*цепь*на*дубе*том:


Замена до определённого символа


//Исходная строка
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:';

$str = 'Зелёный дуб у лукоморья' . mb_substr($str, mb_strpos($str, '; '), -1);

echo $str; //Зелёный дуб у лукоморья; Златая цепь на дубе том

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

Полезная статья?
(Голосов: 2, Рейтинг: 2.94)
Вам также могут понравиться
Обновление остатков товара на складе в 1С Битрикс

Обновление остатков товара на складе в 1С Битрикс

Как правильно обновлять остатки товара на сайта под управлением CMS 1С Битрикс.

Английский для программистов

Английский для программистов

Почему IT-специалисту необходимо освоить английский язык? Разбираем в статье.

Как подключить CSS и JS файлы к шаблону 1С Битрикс

Как подключить CSS и JS файлы к шаблону 1С Битрикс

Как правильно подключать стили и скрипты к шаблону 1С Битрикс.


Комментарии
Защита от автоматических сообщений
CAPTCHA
Введите слово на картинке