3v4l.org

run code in 300+ PHP versions simultaneously
<?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