Язык PHP: Строки и текст
Основы / Математика / Строки и текст / Массивы и списки / Разные ошибки / О сложном
Работа со строками и текстом в PHP
ℹ️ Смотрите также описание класса для работы со строками Str
.
- Как сделать строку из нескольких переменных?
- Как сконвертировать unicode текст или строку в другую кодировку?
- Как декодировать текст из кодировки в юникод?
- Как сгенерировать уникальный идентификатор UUID?
- Как заменить в тексте одну подстроку на другую?
- Как сгенерировать случайную строку из набора символов?
- Как проверить строку на соответствие регулярному выражению?
- Как сделать многострочную строку в коде?
- Как перевести многострочную строку в массив строк?
Как сделать строку из нескольких переменных?
Описание конкатенации, сложения строк и строк с переменными.
Если у вас есть, например, 2 переменные, которые вы хотите сложить вместе и добавить еще и текст к ним, то это можно сделать через строку с двойными кавычками:
$text = 'Счет';
$score = 25;
$message = "$text: $score";
alert($message); // выведет 'Счет: 25'
Осторожно, одинарные кавычки не умеют так делать, подставлять внутрь себя переменные.
Вы также можете подставлять в строку все, что начинается с символа $
:
$message = "Вы ввели текст: $this->edit->text";
alert($message);
Альтернативный способ, синтаксис
Можно использовать немного другое сочетание вставки переменных, такое:
$message = "Вы ввели текст: {$this->edit->text}";
alert($message);
Оно ничем не отличается, возможно так вам будет удобнее визуально выявлять вставки переменный в вашу строку.
Конкатенация
Порой нужно сформировать строку не из переменных, в этом случае используйте конкатенацию, это такой оператор сложения строк, строки можно складывать как и числа:
$message = "Вы ввели текст" . $this->edit->text . " bla bla bla";
alert($message);
За сложение строк в php отвечает оператор
.
, а не+
, плюс это для сложения чисел.
Как сконвертировать unicode текст или строку в другую кодировку?
Метод конвертирования юникодной строки в другую кодировку, например в windows-1251.
Для начала не забываем, что в develnext все строки хранятся изначально в юникоде и поддерживают кодировку UTF-8 и UTF-16 на уровне языка.
Чтобы сконвертировать нашу строку или текст в другую кодировку используйте класс php\lib\str
и его метод encode
:
$message = 'Привет Мир';
$win1251_message = str::encode($message, 'windows-1251');
Этот метод может пригодиться, например, если есть необходимость сохранить текст в файл в другой кодировке, не в юникодной.
Как декодировать текст из кодировки в юникод?
Описание методов конвертирования текста в разные кодировки, в UTF-8, в windows-1251 и т.д.
В develnext из коробки есть поддержка юникода, в том числе и разных кодировок.
Не забывайте, что весь интерфейс программ отображается в кодировке Юникода (UTF-8).
JPHP работает с юникодом как с родным, поэтому с ним у вас не должно быть проблем. Однако, бывает что нужно читать текст из файла в неюникодной кодировке и отображать это в программе. Как это реализовать? Используйте класс php\lib\str
и его метод decode
:
use php\lib\str;
$text = "представьте что тут строка в кодировке windows-1251";
$normalText = str::decode($text, 'windows-1251');
Если вы читаете допустим информацию из файла, то это более актуально:
use php\lib\str;
use php\io\Stream;
$text = Stream::getContents('file-windows-1251.txt');
$message = str::decode($text, 'windows-1251');
alert($message);
Представьте, что в примере выше файл
file-windows-1251.txt
сохранен в кодировке windows-1251, но в программе у нас используется юникод, поэтому нам надо сконвертировать его текст в нужную нам кодировку.
Как сгенерировать уникальный идентификатор UUID?
Описание апи для генерации UUID.
Чтобы сгенерировать UUID используйте класс php\lib\str
и его метод uuid()
:
use php\lib\str;
$uuid = str::uuid();
UUID представляет собой 16-байтный (128-битный) номер. В шестнадцатеричной системе счисления UUID выглядит как:
550e8400-e29b-41d4-a716-446655440000
.
Это похоже на генерацию случайной строки, вероятность повторения которой сводится практически к нулю!
Как заменить в тексте одну подстроку на другую?
Простой способ заменить одну строку на другую в любом тексте.
Используйте для этого класс php\lib\str
и его метод replace
:
use php\lib\str;
$message = str::replace("My Text ABC", "ABC", "XYZ");
alert($message);
В результате $message
будет равен My Text XYZ
.
Если у вас есть массив ключей и значений, что на что менять и вы хотите это сделать одним махом, тогда используйте цикл foreach:
$replaces = ['A' => 'X', 'B' => 'Y', 'C' => 'Z');
$message = "My Text ABC", "ABC", "XYZ";
foreach ($replaces as $what => $to) {
$message = str::replace($message, $what, $to);
}
alert($message);
Как сгенерировать случайную строку из набора символов?
Методы генерации случайных строк, например, для генерации пароля.
Для генерации случайных строк используйте класс php\lib\str
и его метод random
:
$password = str::random(); // случайная строка из 16 символов - англ. буквы и цифры.
$password = str::random(6); // случайная строка из 6 символов - англ. буквы и цифры.
Для того чтобы задать набор других символов, из которых будет генерироваться строка, передайте второй параметр в метод:
$password = str::random(5, 'ABCDF0123456789');
В результате в переменной
$password
будет случайная строка, состоящая из символовABCDF
и цифр.
Как проверить строку на соответствие регулярному выражению?
Аналог preg функции, regexp для регулярных выражений.
Для этого используйте класс php\util\Regex
и его метод match
, например:
use php\util\Regex;
$input = $this->edit->text;
if (Regex::match('^[0-9]+$', $input)) {
alert('Введено число.');
}
Первым параметром передается регулярное выражение, вторым - проверяемая строка. Метод возвращает
true
илиfalse
.
Как сделать многострочную строку в коде?
Для того, чтобы написать многострочную строку в коде php
используйте двойные кавычки и спец-символ \n
:
alert("Привет мир!\nНовая строка");
! Одинарные кавычки не реагируют на такие символы, поэтому этот метод работает только в двойных кавычках.
Как перевести многострочную строку в массив строк?
Начиная с DevelNext 16 RC-2
для этого доступен метод str::lines()
, класс php\lib\str
:
$text = "line1\nline2\nline3";
$array = str::lines($text);
pre($array); // [0 => 'line1', 1 => 'line2', 2 => 'line3'];
У метода
str::lines()
есть второй параметрbool $removeEmpty
, если передать вторым параметромtrue
, то в массиве не будет пустых строк, если они были в тексте.