Деструктуризация массивов

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Деструктуризация массивов — это элегантный способ "распаковать" значения из массива в отдельные переменные. Вместо того чтобы писать `$a = $array[0]; $b = $array[1];`, вы можете сделать это одной строкой: `[$a, $b] = $array;`. Эта возможность, доступная как для индексированных, так и для ассоциативных массивов, делает код значительно чище и короче.

В этом уроке мы изучим все тонкости деструктуризации: от базового синтаксиса с использованием list() и короткой записи `[]` до пропуска элементов, работы с ассоциативными массивами и даже применения этой техники в циклах `foreach`. Задания помогут вам освоить этот мощный синтаксический сахар и начать писать более выразительный PHP-код.

Список тем

Основы деструктуризации: короткий синтаксис

id: 38981_task1

Начиная с PHP 7.1, для деструктуризации массивов можно использовать короткий синтаксис с квадратными скобками `[]`. Распакуйте массив `$data` в переменные `$first` и `$second`, используя эту современную конструкцию.

Заполните пропуски
<?php
$data = [10, 20];

// Распаковываем массив в две переменные
[input1S, input2S] = $data;

echo $first . ' ' . $second;
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Классический синтаксис с list()

id: 38981_task2

До появления короткого синтаксиса `[]` для деструктуризации использовалась языковая конструкция `list()`. Она работает аналогично. Проанализируйте код и выберите, какое значение будет выведено на экран.

Выберите правильный вариант ответа
<?php
$point = [150, 75];

list($x, $y) = $point;

echo $y;
?>
Сообщения
Проверить
Показать подсказку

Пропуск элементов при деструктуризации

id: 38981_task3

При деструктуризации можно пропускать ненужные элементы массива. В этом коде стоит задача поместить первый элемент в `$a`, а третий — в `$c`, пропустив второй. Сейчас код делает это неправильно, так как в `$c` попадает второй элемент. Исправьте строку деструктуризации.

Найдите ошибку и исправьте
<?php
$data = ['red', 'green', 'blue'];
 
[$a, $c] = $data;
 
// Ожидаемый результат: $a = 'red', $c = 'blue'
echo "A is $a, C is $c";
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Деструктуризация ассоциативных массивов

id: 38981_task4

Деструктуризация прекрасно работает и с ассоциативными массивами. В этом случае вы указываете ключи, чтобы извлечь соответствующие им значения. Проанализируйте код и напишите, что он выведет на экран.

Что должно получиться?
<?php
$book = [
    'author' => 'George Orwell',
    'title' => '1984',
    'year' => 1949
];

['title' => $book_title] = $book;

echo $book_title;
?>
Сообщения
Проверить
Показать подсказку

Переименование переменных при деструктуризации

id: 38981_task5

Иногда имена ключей в массиве не подходят для имен переменных. Деструктуризация позволяет сразу "переименовать" их. Распакуйте массив `$user`, присвоив значение ключа 'user_id' переменной `$id`, а значение 'user_name' — переменной `$name`. Используйте токены из банка.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$user = ['user_id' => 42, 'user_name' => 'John Doe'];

[input1S => input2S, input3S => input4S] = $user;

echo "ID: $id, Name: $name";
?>
'user_id'
$id
'user_name'
$name
'id'
'name'
$user
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Деструктуризация в цикле foreach

id: 38981_task6

Одна из самых удобных областей применения деструктуризации — это циклы `foreach` при итерации по массиву массивов. Соберите из частей скрипт, который перебирает массив пользователей и для каждого выводит его ID и имя в отформатированной строке.

Перетяните в правильном порядке строки из одного блока в другой
$users = [['id' => 1, 'name' => 'Neo'], ['id' => 2, 'name' => 'Morpheus']];
foreach ($users as ['id' => $id, 'name' => $name]) {
<?php
    echo "User $id is $name\n";
}
foreach ($users as $user) {
echo $user['id'];
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Элегантный обмен переменных

id: 38981_task7

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

Найдите ошибку и исправьте
<?php
$a = 5;
$b = 10;
 
[$a, $b] = $b, $a; // Ошибка в синтаксисе
 
echo "a = $a, b = $b";
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Вложенная деструктуризация

id: 38981_task8

Деструктуризация может быть вложенной, что позволяет извлекать значения из многомерных массивов еще более эффективно. Проанализируйте код со вложенной деструктуризацией и определите, какое значение будет выведено.

Выберите правильный вариант ответа
<?php
$data = [
    'product_id' => 123,
    'info' => [
        'title' => 'Laptop',
        'details' => [
            'name' => 'SuperBook Pro',
            'price' => 1500
        ]
    ]
];

['info' => ['details' => ['name' => $product_name]]] = $data;

echo $product_name;
?>
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру