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