- print_r: documentation ( source)
- array_merge: documentation ( source)
- explode: documentation ( source)
- key: documentation ( source)
- current: documentation ( source)
<?php
$mapping = [
new Mapper(['jobname' => 'beruf']),
new Mapper(['num_salary' => 'einkommen.anzahlGehaelter']),
new Mapper(['netincome' => 'einkommen.netto']),
new Mapper(['grossincome' => 'einkommen.brutto'])
];
$payload = [
'beruf' => 'Maler',
'einkommen' => [
'anzahlGehaelter' => 12,
'netto' => 51253,
'brutto' => 786522
]
];
final class Mapper
{
private $key;
private $name;
public function __construct(array $mapping)
{
$this->key = key($mapping);
$this->name = current($mapping);
}
public function extract(array $payload): array
{
foreach (explode('.', $this->name) as $name) {
if (!array_key_exists($name, $payload)) {
return [];
}
$payload = $payload[$name];
}
return [
$this->key => $payload
];
}
}
$output = [];
foreach ($mapping as $mapper) {
$output = array_merge($output, $mapper->extract($payload));
}
print_r($output);