<?php
$array = [
'Foo',
'bAr' => 'BaR',
'suB' => [
'a' => 1,
2 => 'b',
'C' => null,
],
'obj' => (object) [
'd' => 1.333,
'SubArR' => [
'This' => 'Is',
'a' => 'challenge',
]
]
];
function recursiveMapper(array|object &$level, callable $callback) {
$new = [];
foreach ($level as $k => $v) {
$new[$k] = match (gettype($v)) {
'string' => $callback($v),
'array', 'object' => (__FUNCTION__)($v, $callback),
default => $v
};
}
if (gettype($level) === 'object') {
$new = (object) $new;
}
return $new;
}
var_export(recursiveMapper($array, 'strtolower'));
- Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
- array (
0 => 'foo',
'bAr' => 'bar',
'suB' =>
array (
'a' => 1,
2 => 'b',
'C' => NULL,
),
'obj' =>
(object) array(
'd' => 1.333,
'SubArR' =>
array (
'This' => 'is',
'a' => 'challenge',
),
),
)
preferences:
58.94 ms | 407 KiB | 5 Q