Работа с вложенными структурами данных в PHP с помощью Data Block

Пакет Data Block - это удобный инструмент для разработчиков на PHP, который помогает работать с вложенными структурами данных, такими как JSON из API или массивы с глубокими уровнями вложения. Он облегчает чтение, фильтрацию и изменение данных без громоздких ручных проверок и условий, которые обычно приходится писать самим.


Что такое Data Block и зачем он нужен

Иногда в приложениях приходится иметь дело с большими и сложными наборами данных такими как ответы API, конфигурации в JSON, массивы с разными уровнями вложенности. Data Block оборачивает такие структуры в объект, который позволяет:

  • безопасно получать значения по пути, используя точки (например, user.profile.name);

  • фильтровать и сортировать данные по условиям;

  • изменять или добавлять вложенные элементы;

  • экспортировать результат в разные форматы (JSON, YAML или в файл).

Это особенно полезно, когда стандартные массивы PHP становятся неудобными для работы из-за глубокой вложенности.


Как начать использовать Data Block

Для использования пакета нужно импортировать класс Block из пространства имен:

use HiFolks\DataType\Block;
use HiFolks\DataType\Enums\Operator;

Пакет поддерживает создание объекта Block из разных источников:

  • прямо из массива;

  • из JSON-строки;

  • по URL, который возвращает JSON.


Примеры работы с данными

Чтение и фильтрация

Вот как можно загрузить данные из внешнего API и вывести только те элементы, которые соответствуют условию:

Block::fromJsonUrl('https://api.github.com/orgs/hi-folks/repos')
    ->select('full_name', 'stargazers_count')
    ->where('stargazers_count', Operator::GREATER_THAN, 0)
    ->orderBy('stargazers_count', 'desc')
    ->forEach(function ($item) {
        echo $item->get('full_name').' : '.$item->get('stargazers_count').PHP_EOL;
    });

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


Работа с вложенными массивами

Если у вас есть вложенный массив с данными, например список фруктов, можно легко получать и изменять значения:

$fruits = [
    "avocado" => [
        'name' => 'Avocado',
        'fruit' => '',
        'wikipedia' => 'https://en.wikipedia.org/wiki/Avocado',
        'color' => 'green',
        'rating' => 8
    ],
    // ...
];

$data = Block::make($fruits);

$data->get('avocado'); // возвращает массив
$data->get('avocado.color'); // возвращает строку "green"

$data->set('cherry', [
    'name' => 'Cherry',
    'fruit' => '',
    'wikipedia' => 'https://en.wikipedia.org/wiki/Cherry',
    'color' => 'red',
    'rating' => 9,
]);
$data->set('cherry.rating', 5);

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


Экспорт данных

После всех операций объект Block можно преобразовать обратно в JSON или сохранить в файл, что удобно для сериализации, передачи по API или записи в конфигурацию.


Когда стоит использовать Data Block

Этот пакет особенно полезен в следующих случаях:

  • когда данные приходят из внешних источников в виде сложных JSON-структур;

  • когда нужно обрабатывать вложенные данные без большого количества ручных проверок;

  • если приложение активно фильтрует, сортирует или трансформирует данные перед использованием;

  • для прототипов, где важна скорость разработки и простота кода.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Типичные ошибки безопасности в Laravel-приложениях и как их правильно исправить

Распространённые ошибки безопасности в Laravel-приложениях и способы их устранения. Разбираем CSRF, SQL-инъекции, XSS, массовое заполнение, загрузку файлов и настройки окружения.

38 0 1 мин

Как создать AI-агента на Python с OpenAI для автоматического парсинга счетов

Подробный гайд, как разработать полноценного AI-агента на Python и OpenAI API, который автоматически парсит счета (PDF, фото), вытягивает данные в структурированный JSON, валидирует их и сохраняет в CSV или базу. Плюс интеграция с Telegram-ботом для загрузки документов.

45 0 3 мин