Recursively left trim a specific character from keys
I can't quite work this out...
I was hoping that there would be a default PHP function to do this, but it seems there isn't. The code I've found online seems to not really work for my situation, since often people have only need to the modify array values and 开发者_JAVA百科not their keys.
I basically need a recursive function that replaces every key that starts with a '_' with the same key without that symbol....
Has anybody here used something similar before?
Try this:
function replaceKeys(array $input) {
$return = array();
foreach ($input as $key => $value) {
if (strpos($key, '_') === 0)
$key = substr($key, 1);
if (is_array($value))
$value = replaceKeys($value);
$return[$key] = $value;
}
return $return;
}
So this code:
$arr = array('_name' => 'John',
'ages' => array(
'_first' => 10,
'last' => 15));
print_r(replaceKeys($arr));
Will produce (as seen on codepad):
Array
(
[name] => John
[ages] => Array
(
[first] => 10
[last] => 15
)
)
Use PHP's native array_walk_recursive()
This seems to be a cleaner solution, with $key passed as a reference in the callback function as follows:
array_walk_recursive($your_array, function ($item, &$key) {
if (strpos($key, '_') === 0) {
$key = substr($key, 1);
}
});
精彩评论