PHPackages                             emulgeator/array-to-class-mapper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. emulgeator/array-to-class-mapper

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

emulgeator/array-to-class-mapper
================================

A library what is capable of transforming a multilevel array to a class object

1.1.1(2y ago)012.6k↓20%[1 issues](https://github.com/emulgeator/array_to_class_mapper/issues)[1 PRs](https://github.com/emulgeator/array_to_class_mapper/pulls)1MITPHPPHP &gt;=7.4CI passing

Since Jun 2Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/emulgeator/array_to_class_mapper)[ Packagist](https://packagist.org/packages/emulgeator/array-to-class-mapper)[ RSS](/packages/emulgeator-array-to-class-mapper/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (9)Dependencies (3)Versions (18)Used By (1)

Array to Class Mapper
=====================

[](#array-to-class-mapper)

A simple library which automatically maps a given multi dimensional array to a given class.

Getting Started
---------------

[](#getting-started)

### Installing

[](#installing)

Run `composer require emulgeator/array-to-class-mapper` to add this library as a dependency to your project

Usage
-----

[](#usage)

### Simple scalar type mapping

[](#simple-scalar-type-mapping)

```
use Emul\ArrayToClassMapper\MapperFactory;

class DTO
{
    private int $id;

    private float $value;

    public function __construct() {
        // Constructor wont be called
    }
}

$arrayToMap = [
    'id' => '1',
    'value' => '1.2'
];

$mapper = (new MapperFactory())->getMapper();

/** @var DTO $dto */
$dto = $mapper->map($arrayToMap, DTO::class);
```

As you'll see the library casts the values from the given array. So for example: `$dto->id` will be an integer indeed.

The mapper does that by checking the type of the property. If it's not set it tries to fetch this information from the **DocBlock**

### Class mapping

[](#class-mapping)

```
use Emul\ArrayToClassMapper\MapperFactory;

require_once 'vendor/autoload.php';

class InnerDTO
{
    private string $key;
    private string $value;
}

class DTO
{
    private InnerDTO $inner;
}

$arrayToMap = [
    'inner' => [
        'key'   => 'first_key',
        'value' => 'value'
    ]
];

$mapper = (new MapperFactory())->getMapper();

/** @var DTO $dto */
$dto = $mapper->map($arrayToMap, DTO::class);
```

### Complex type mapping

[](#complex-type-mapping)

In case of complex types you both DocBlock and type hinting can be used. See the previous example modified to have a series of inner objects:

```
use Emul\ArrayToClassMapper\MapperFactory;

require_once 'vendor/autoload.php';

class InnerDTO
{
    private string $key;
    private string $value;
}

class DTO
{
    private int $id;

    /** @var InnerDTO[] */
    private array $inner = [];
}

$arrayToMap = [
    'id' => 1,
    'inner' => [
        [
            'key'   => 'first_key',
            'value' => 'value'
        ],
        [
            'key'   => 'second_key',
            'value' => 'value'
        ],
    ]
];

$mapper = (new MapperFactory())->getMapper();

/** @var DTO $dto */
$dto = $mapper->map($arrayToMap, DTO::class);
```

### Defining custom mapper for specific type

[](#defining-custom-mapper-for-specific-type)

If a data mapping is not possible by simply casting the stored value, custom mappers can be set:

```
use Carbon\Carbon;
use Carbon\CarbonInterface;
use Emul\ArrayToClassMapper\MapperFactory;

require_once 'vendor/autoload.php';

class InnerDTO
{
    private string $key;
    private string $value;

    public function __construct(string $keyPrefix, string $key, string $value)
    {
        $this->key   = $keyPrefix . $key;
        $this->value = $value;
    }
}

class DTO
{
    private int $id;

    /** @var InnerDTO[] */
    private array $values;
}

$arrayToMap = [
    'id'        => 1,
    'values' => [
        [
            'key' => 'first',
            'value' => '1'
        ],
    ],
];

$mapper = (new MapperFactory())->getMapper();

$innerDTOMapper = \Closure::fromCallable(function (array $data) {
    return new InnerDTO('prefix_', $data['key'], $data['value']);
});

$mapper->addCustomMapper(InnerDTO::class, $innerDTOMapper);
/** @var DTO $dto */
$dto = $mapper->map($arrayToMap, DTO::class);
```

The same works if the Custom type is in an array but in this case the mapper function will receive the subarray as is:

```
```

Limitations
-----------

[](#limitations)

The library currently is not able to import and auto load a class defined in a DocBlock. The following example will not work because the class is not imported neither we know the FQCN:

```
/** @var Value[] */
private array $values = [];
```

To fix this you need to use the FQCN of the class:

```
/** @var \NameSpace\Value[] */
private array $values = [];
```

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance53

Moderate activity, may be stable

Popularity24

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~156 days

Recently: every ~9 days

Total

10

Last Release

767d ago

Major Versions

0.2.0 → 1.0.02024-03-26

### Community

Maintainers

![](https://www.gravatar.com/avatar/81c871f43e6e6a837aabda1a7c6eca62b02bfcd6d3a59ed86c11414eedb29528?d=identicon)[emulgeator](/maintainers/emulgeator)

---

Top Contributors

[![emulgeator](https://avatars.githubusercontent.com/u/1370980?v=4)](https://github.com/emulgeator "emulgeator (27 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/emulgeator-array-to-class-mapper/health.svg)

```
[![Health](https://phpackages.com/badges/emulgeator-array-to-class-mapper/health.svg)](https://phpackages.com/packages/emulgeator-array-to-class-mapper)
```

###  Alternatives

[spatie/fork

A lightweight solution for running code concurrently in PHP

1.0k2.6M39](/packages/spatie-fork)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
