[редактировать]

Язык PHP: Строки и текст

Основы / Математика / Строки и текст / Массивы и списки / Разные ошибки / О сложном

Работа со строками и текстом в PHP


ℹ️ Смотрите также описание класса для работы со строками Str.



Как сделать строку из нескольких переменных?

Описание конкатенации, сложения строк и строк с переменными.

Если у вас есть, например, 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, то в массиве не будет пустых строк, если они были в тексте.