Каждый массив в PHP состоит из двух частей: ключей и значений. Часто возникает задача получить их по отдельности. Для этого существуют две парные и очень полезные функции: `array_keys()` и `array_values()`.
Первая, как следует из названия, извлекает из массива все его ключи и возвращает их в виде нового, простого нумерованного массива. Вторая делает то же самое, но со значениями. Это незаменимые инструменты, когда нужно, например, получить список всех пользователей (значения) или их идентификаторов (ключи) для дальнейшей обработки.
В этом тренажере мы научимся использовать обе функции, разберем их продвинутые возможности, такие как поиск ключей по значению, и посмотрим, как они помогают решать практические задачи.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Получение всех ключей массива
Начнем с основ. У нас есть ассоциативный массив, описывающий пользователя. Ваша задача — получить из него новый массив, содержащий только ключи ('name', 'age', 'city'). Заполните пропуск, используя нужную функцию.
<?php
$user_data = [
'name' => 'John',
'age' => 30,
'city' => 'New York'
];
$keys = input1S($user_data);
print_r($keys);
?>Получение всех значений массива
Теперь сделаем обратную операцию. Используя тот же массив с данными пользователя, получите новый массив, который будет содержать только значения ('John', 30, 'New York'). Заполните пропуск, чтобы код заработал.
<?php
$user_data = [
'name' => 'John',
'age' => 30,
'city' => 'New York'
];
$values = input1S($user_data);
print_r($values);
?>Функция и её назначение
Давайте закрепим разницу между двумя функциями. Сопоставьте название каждой функции в правом столбце с её правильным описанием в левом столбце.
array_values()array_search()array_keys()Что вернет array_values?
Важно помнить, что `array_values` создает новый, нумерованный массив. Посмотрите на код с ассоциативным массивом и предскажите, что именно выведет `print_r()`. Скопируйте или напишите точный результат в поле ответа.
<?php
$fruits = [
'a' => 'apple',
'b' => 'banana',
'c' => 'cherry'
];
$values_only = array_values($fruits);
print_r($values_only);
?>Продвинутый array_keys: поиск ключей по значению
Функция `array_keys()` умеет не только возвращать все ключи, но и находить ключи, соответствующие определенному значению. Проанализируйте код и выберите, что он выведет на экран.
<?php
$user_roles = [
'user1' => 'editor',
'user2' => 'admin',
'user3' => 'editor'
];
// Находим всех пользователей с ролью 'editor'
$editor_keys = array_keys($user_roles, 'editor');
print_r($editor_keys);
?>Поиск ключей со строгой проверкой
Дополним предыдущее задание. Иногда нужно искать значение, учитывая его тип. Для этого у `array_keys()` есть третий параметр. Заполните пропуски из банка, чтобы найти ключ, соответствующий числу `1`, а не строке '1'.
<?php
$data = ['a' => 1, 'b' => '1', 'c' => 2];
// Ищем ключи, где значение строго равно числу 1
$keys = array_keys($data, input1S, input2S);
print_r($keys);
?>Исправьте логическую ошибку
Программист хотел получить список имен пользователей (значений), но по ошибке использовал не ту функцию. В результате в переменной `$names` оказался список ключей. Исправьте строку с ошибкой, чтобы скрипт вывел имена.
<?php$users = ['id_1' => 'Alice', 'id_2' => 'Bob']; // Ошибка: получаем ключи вместо значений$names = array_keys($users); print_r($names);?>Сборка: Разделение массива на ключи и значения
Соберите из фрагментов скрипт, который принимает массив с настройками, извлекает отдельно все названия настроек (ключи) и их значения, а затем выводит оба получившихся массива. Будьте внимательны, есть лишние строки.
print_r($keys);<?php$values = array_values($settings);print_r($values);$settings = ['theme' => 'dark', 'font_size' => 14];?>$keys = array_keys($settings);$keys = array_search('dark', $settings);