Зарегистрируйтесь, чтобы продолжить обучение

Ассоциативный массив в действии PHP: Ассоциативные массивы

Рассмотрим пример, в котором используется ассоциативный массив. Напишем функцию, которая принимает на вход путь до файла и возвращает информацию об этом файле в виде ассоциативного массива.

<?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;
}

Такое встречается значительно реже, но все же бывает.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»