PHP: Извлечение символов из строки
Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя и нужно вывести их в сокращенном формате вида A. Ivanov. Для этого потребуется взять первую букву имени.

В PHP для доступа к символам строки используют индексацию. Индексация означает, что у каждого символа в строке есть свой номер, то есть индекс. Индексация начинается с нуля: у первого символа индекс 0, у второго 1 и так далее. Представим, что у нас есть строка:
<?php
$firstName = 'Alexander';Чтобы получить первую букву, указываем ее позицию (индекс) в квадратных скобках:
<?php
print_r($firstName[0]); // => AКвадратные скобки с индексом внутри — это специальный оператор извлечения символа из строки. Индексы в PHP (и во многих языках) начинаются с нуля:
Символ A l e x a n d e r
Индекс 0 1 2 3 4 5 6 7 8Длина строки Alexander равна 9, поэтому индекс последнего символа равен 8, то есть 9 - 1.
Чтобы получить, например, последний символ, можно написать:
<?php
print_r($firstName[8]); // => rЕсли изменится длина строки, то последний элемент тоже сдвинется и придется указывать новый индекс, по которому расположен этот символ.
А если выйти за границы строки, PHP сообщит о проблеме:
<?php
print_r($firstName[9]);
// Warning: Uninitialized string offset 9Поэтому в программировании принято проверять длину строки и обращаться к ее символам, только если это безопасно. Мы до этого дойдем в будущих уроках.
Укороченное извлечение с конца
Для получения элементов с конца лучше пользоваться отрицательными индексами. В таком случае отсчет начинается с конца.
<?php
$firstName = 'Alexander';
print_r($firstName[-1]); // => r, последний символ
print_r($firstName[-2]); // => e, предпоследний символСтрока: 'H' 'e' 'x' 'l' 'e' 't'
Индекс: 0 1 2 3 4 5
С конца: -6 -5 -4 -3 -2 -1Отрицательные индексы работают так:
- -1 соответствует последнему символу
- -2 соответствует предпоследнему
- и так далее
Это удобно и безопасно, потому что работает правильно, даже если строка меняет свою длину.
Индекс можно хранить в переменной:
<?php
$firstName = 'Alexander';
$index = 0;
print_r($firstName[$index]); // => AТакой подход полезен, когда индекс вычисляется где-то в коде, а потом используется для доступа к нужному символу.
Спецсимволы
При индексации учитываются обычные буквы, знаки и спецсимволы. Все они занимают позицию в строке и имеют свой индекс, даже если их "не видно" на экране.
Например, в строке "\nyou" первый символ представляет собой \n (перенос строки), а под индексом 1 уже идет буква y. Поэтому обращение $magic[1] вернет именно y. Обратите внимание на двойные кавычки: в одинарных кавычках \n остался бы двумя отдельными символами — обратным слешем и буквой n.
Подумайте: что выведет этот код?
<?php
$magic = "\nyou";
print_r($magic[1]); // => ?Вывод будет:
yЗадание
В переменной $text спрятано секретное слово. Извлеките нужные символы из переменной по индексам, соедините их и выведите на экран слово grip.
PHP: Извлечение символов из строки
Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя и нужно вывести их в сокращенном формате вида A. Ivanov. Для этого потребуется взять первую букву имени.

В PHP для доступа к символам строки используют индексацию. Индексация означает, что у каждого символа в строке есть свой номер, то есть индекс. Индексация начинается с нуля: у первого символа индекс 0, у второго 1 и так далее. Представим, что у нас есть строка:
<?php
$firstName = 'Alexander';Чтобы получить первую букву, указываем ее позицию (индекс) в квадратных скобках:
<?php
print_r($firstName[0]); // => AКвадратные скобки с индексом внутри — это специальный оператор извлечения символа из строки. Индексы в PHP (и во многих языках) начинаются с нуля:
Символ A l e x a n d e r
Индекс 0 1 2 3 4 5 6 7 8Длина строки Alexander равна 9, поэтому индекс последнего символа равен 8, то есть 9 - 1.
Чтобы получить, например, последний символ, можно написать:
<?php
print_r($firstName[8]); // => rЕсли изменится длина строки, то последний элемент тоже сдвинется и придется указывать новый индекс, по которому расположен этот символ.
А если выйти за границы строки, PHP сообщит о проблеме:
<?php
print_r($firstName[9]);
// Warning: Uninitialized string offset 9Поэтому в программировании принято проверять длину строки и обращаться к ее символам, только если это безопасно. Мы до этого дойдем в будущих уроках.
Укороченное извлечение с конца
Для получения элементов с конца лучше пользоваться отрицательными индексами. В таком случае отсчет начинается с конца.
<?php
$firstName = 'Alexander';
print_r($firstName[-1]); // => r, последний символ
print_r($firstName[-2]); // => e, предпоследний символСтрока: 'H' 'e' 'x' 'l' 'e' 't'
Индекс: 0 1 2 3 4 5
С конца: -6 -5 -4 -3 -2 -1Отрицательные индексы работают так:
- -1 соответствует последнему символу
- -2 соответствует предпоследнему
- и так далее
Это удобно и безопасно, потому что работает правильно, даже если строка меняет свою длину.
Индекс можно хранить в переменной:
<?php
$firstName = 'Alexander';
$index = 0;
print_r($firstName[$index]); // => AТакой подход полезен, когда индекс вычисляется где-то в коде, а потом используется для доступа к нужному символу.
Спецсимволы
При индексации учитываются обычные буквы, знаки и спецсимволы. Все они занимают позицию в строке и имеют свой индекс, даже если их "не видно" на экране.
Например, в строке "\nyou" первый символ представляет собой \n (перенос строки), а под индексом 1 уже идет буква y. Поэтому обращение $magic[1] вернет именно y. Обратите внимание на двойные кавычки: в одинарных кавычках \n остался бы двумя отдельными символами — обратным слешем и буквой n.
Подумайте: что выведет этот код?
<?php
$magic = "\nyou";
print_r($magic[1]); // => ?Вывод будет:
yЗадание
В переменной $text спрятано секретное слово. Извлеките нужные символы из переменной по индексам, соедините их и выведите на экран слово grip.
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\AdvancedStrings\Symbols;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = 'grip';
$this->assertOutput($expected);
}
}Решение учителя откроется через:
20:00
