<?php
function map(array $array, array $keys)
{
$filter = function ($branch) {
return $branch;
};
foreach (array_reverse($keys) as $key)
{
$filter = function ($branch) use ($filter, $key) {
var_dump($key, $branch);
switch ($key)
{
case '*':
case '?':
return array_map(function ($dimension) use ($filter) {
return $filter($dimension);
}, $branch);
default:
return $filter($branch)[$key];
}
};
}
return $filter($array);
}
$array = [
'a' => [
'b' => [
[
'c' => 'foo',
],
[
'c' => 'bar',
],
[
'c' => 'qux',
],
],
],
];
$keys = ['a', 'b', '*', 'c'];
var_dump(map($array, $keys));
preferences:
37.07 ms | 402 KiB | 5 Q