Рассмотрим пример, в котором используется ассоциативный массив. Напишем функцию, которая принимает на вход путь до файла и возвращает информацию об этом файле в виде ассоциативного массива.
<?php
$filepath = '/path/to/index.php';
$fileinfo = getFileInfo($filepath);
// [
// 'extension' => 'php',
// 'filename' => 'index.php'
// ];
Для начала нам нужно извлечь имя файла. Это можно сделать, используя метод explode()
.
<?php
// Разделяем путь на промежуточные директории и файл
$pathParts = explode('/', $filepath);
// Извлекаем имя файла
// array_key_last() возвращает последний ключ массива
$filename = $pathParts[array_key_last($pathParts)];
Затем, точно таким же способом, можно получить и расширение:
<?php
$nameParts = explode('.', $filename);
$extension = $nameParts[array_key_last($nameParts)];
Теперь, объединяя все вместе, реализуем нужную функцию:
<?php
function getFileInfo($filepath)
{
$pathParts = explode('/', $filepath);
$filename = $pathParts[array_key_last($pathParts)];
$nameParts = explode('.', $filename);
$extension = $nameParts[array_key_last($nameParts)];
// В значения вместо переменных подставятся нужные значения
$info = ['filename' => $filename, 'extension' => $extension];
return $info;
}
В примере выше ассоциативный массив создается сразу, когда все данные уже готовы. Иногда делают по другому, инициализируют массив в самом начале и постепенно наполняют его данными:
<?php
function getFileInfo($filepath)
{
// Инициализация массива
$info = [];
$pathParts = explode('/', $filepath);
$filename = $pathParts[array_key_last($pathParts)];
$info['filename'] = $filename;
$nameParts = explode('.', $filename);
$extension = $nameParts[array_key_last($nameParts)];
$info['extension'] = $extension;
return $info;
}
Какой способ предпочесть? В подавляющем большинстве ситуаций первый способ лучше. Когда ассоциативный массив создается сразу со всеми данными, то его структура очевидна с первого взгляда. Во втором примере придется пробежаться глазами по всему коду, чтобы понять, что же получится в итоге. С другой стороны, второй способ нужен в ситуациях, когда массив заполняется по условиям, которые могут не выполняться:
<?php
// Добавляем свойство в объект только если расширение существует
if ($extension) {
$info['extension'] = $extension;
}
Такое встречается значительно реже, но все же бывает.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.